编写高效、规范的js代码:
1、变量命名空间问题,尽量使用局部变量,防止命名冲突(污染作用域中的全局变量);全局空间命名的变量可以在对应的文档域任意位置中使用window调用。
2、尽量使用单var定义变量(作用域开始先申明并赋值变量,便于后边使用),使用var定义的变量只作用于对应的作用域中,如定义的全局变量作用于全局作用域,函数中定义的变量作用于该局部作用域中。未用var定义的变量相当于一个全局变量,在函数中出现的该类变量作用域全局域。(但是var定义的全局变量不能用delete删除,而未定义的全局变量可以用delete删除,说明未定义的全局变量就是全局对象的一个属性。)
3、for循环用于遍历数组及类似数组的对象,采用缓存数组(或集合)的长度是比较好的形式,提高效率如下:
1 // 次佳的循环 2 for (var i = 0; i < myarray.length; i++) { 3 // 使用myarray[i]做点什么 4 }
与
1 for (var i = 0, max = myarray.length; i < max; i++) { 2 // 使用myarray[i]做点什么 3 }
详细了解js作用域请访问 http://www.w3cfuns.com/blog-3-5396544.html
4、for-in
循环应该用在非数组对象的遍历上,使用for-in
进行循环也被称为“枚举”。
5、JavaScript的变量在比较的时候会隐式类型转换。这就是为什么一些诸如:false == 0 或 “” == 0 返回的结果是true。为避免引起混乱的隐含类型转换,在你比较值和表达式类型的时候始终使用===和!==操作符。
6、避免(Avoiding) eval()
可以用Function()代替eval(),因为eval()会干扰作用域,它可以访问和修改它外部作用域中的变量,而Function只管全局作用域,防止本地变量的污染。
1 (function () { 2 var local = 1; 3 eval("local = 3; console.log(local)"); // logs "3" 4 console.log(local); // logs "3" 5 }()); 6 7 (function () { 8 var local = 1; 9 Function("console.log(typeof local);")(); // logs undefined 10 }());
7、命名规范,遵循标准命名规范。
8、注释:增加代码可读性维护性。