这是接着上一篇的博文写的,首先说一下编程规范的重要性吧,它可以让我们的代码保持一致性,可预测,更易于阅读和理解。一个新的开发者可以通过阅读规范,理解其他团队成员书写的代码,更快的上手干活。
第一点就是缩进。
很糟糕的一件事就是不一致的缩进,因为它看上去像是遵循了规范,但是可能一路上伴随着混乱和惊奇,重要的是规范的使用缩进。
一些开发人员喜欢用tab制表符缩进,因为任何人都可以调整他们的编辑器以自己喜欢的空格数来显示tab。也有人喜欢用空格,通常是四个空格。一般这个无所谓,只要团队每个人都遵循同一个规范就好了。
下面是一个缩进的范例:
function outer(a, b) { var c = 1, d = 2, inner; if (a > b) { inner = function () { return { r: c - d }; }; } else { inner = function () { return { r: c + d }; }; } return inner; }
第二点就是花括号
花括号,也成为大括号。在技术上讲,在in或者是for中如果语句只有一条,那么花括号是不需要的,但是我们还是应该总是使用它们,这会让代码更具有持续性和易于更新。
对于左大括号的位置,有人喜欢放在同一行,有人喜欢放在下一行,一般来说并不重要。但是在某些情况下,括号位置不同会有不同的行为表现。这是因为分号插入机制(semicolon insertion mechanism),因为JavaScript会当我们选择不适用分号结束一行代码的时候JavaScript帮我们自动补上,这可能会导致麻烦。
比如下面代码:
function func() {
return
//下面代码不执行
{
name:"xin"
}
}
如果我们希望函数返回一个含有name属性的对象,我们会发现,由于隐藏分号,函数会返回undefined,前面的代码等价于下面的操作:
function func() {
return undefined;
//下面代码不执行
{
name:"xin"
}
}
总之,就是使用花括号,并且始终把在与之前的语句放在同一行:
function func() {
return {
name:"xin"
};
}
第三点就是空格
空格的使用同样有助于改善代码的可读性和一致性。适合使用空格的地方包括:
(1)for循环分号分开后的部分。比如for (var i = 0; i < 10; i += 1 ){ ... }
(2)for循环中初始化的多变量。比如for (var i = 0, max= 10; i < max; i += 1 ){ ... }
(3)分割数组的逗号的后面。比如var a = [1, 2, 3];
(4)对象属性逗号的后面以及分隔属性名和属性值的冒号的后面。比如var o = {a: 1,b:2 };
(5)限定函数参数。比如 myFunc(a, b, c)
(6)匿名函数表达式function的后面。比如var myFunc =function () { ... }
(7)函数声明的花括号的前面。 比如 function myFunc() { ... }
(8)使用空格分开所有的操作符和操作对象。比如+, -, *, =等前后都使用空格。
第四点就是命名规范
我们通常需要用同一种形式给我们的变量和函数命名,下面是一些规则:
(1)以大写字母写构造函数。虽然JavaScript没有类,但有new调用的构造函数,
比如var adam = new Person();这样我们就可以仅仅通过看函数名来知道该函数是否是一个正常函数。
(2)分割单词。当我们的变量或者函数名有多个单词的时候,最好单词的分离遵循统一的规范
一种常见的做法就是"驼峰(camel)命名法",就是单词小写,每个单词的首字母大写
对于构造函数,可以使用大驼峰命名法(upper camel case),比如MyConstructor()
对于函数和方法名,可以使用小驼峰命名法(lower camel case),比如myFunction().
对于变量,开发者通常使用小驼峰命名法,还可以使用所有单词小写,使用下划线链接,
比如变量可以用first_name,old_company_name等等
(3)JavaScript中没有定义常亮的方法,
开发者都采用全部单词大写来命名这个程序声明周期中不会改变的变量
比如var PI = 3.14 ,MAX_WIDTH = 900;
(4)开发者可以仅仅使用一个下划线前缀来表示一个私有属性或者私有方法,比如
var person = {
getName: function (){
return this._getFirst() + ‘ ‘ + this._getLast();
},
_getFirst: function() {
...
},
_getLast:function (){
...
}
};
在上面的例子中,getName()就表示公共方法,部分稳定的API。而_getFirst()和_getLast()则表明了私有。它仍然是正常的公共方法,但是使用下划线前缀来警告person对象的使用者这些方法在下一个版本中是不能保证工作的,是不能直接使用的。
对于常见的_private规范:
(1)使用尾下划线表示私有,比如name_和getElements_()
(2)使用一个下划线前缀_ 表示protected属性,两个下划线前缀__ 表示private属性。