Skip to content

Latest commit

 

History

History
124 lines (92 loc) · 3.21 KB

[20141011]编写高质量JS代码的68个有效方法(二).md

File metadata and controls

124 lines (92 loc) · 3.21 KB
title date
编写高质量JS代码的68个有效方法(二)
2014/10/11

##No.6、了解分号插入的局限性 Tips:

  1. 仅在“}”标记之前、一行的结束和程序的结束处推导分号
  2. 仅在紧接着的标记不能被解析的时候推导分号
  3. 在以(、[、+、-或/字符开头的语句前绝不能省略分号
  4. 当脚本连接的时候,在脚本之间显式的插入分号
  5. 在return、throw、break、continue、++或--的参数之前绝不能换行
  6. 分号不能作为for循环的头部和空语句的分隔符而被推导出
  7. 个人总结:尽量不要省略分号,不要让JS自动推导

分号仅在}标记之前、一个或多个换行之后和程序输入的结尾被插入,看代码:

// 能自动推导分号
function square(x){
	var n = +x
	return n*n
}

// Error,不能自动推导
function square(x){var n = +x return n*n}

分号仅在随后的输入标记不能被解析时插入,看代码:

a=b
(f());
此时,代码等价于 ab(f());
但是:
a=b
f()
则会被解析为a=b f();

在以(、[、+、-或/字符开头的语句前,绝不能省略分号,看代码:

a=b
['a','b','c'].forEach(function(key){
	console.log(key)
})
等价于
a=b['a','b','c'].forEach(function(key){
	console.log(key);
});

a=1
/Error/i.test('test')
等价于
a=1/Error/i.test('test');

合并脚本时不能省略分号,看代码:

//file1.js
(function(){console.log('file1')})()

//file2.js
(function(){console.log('file2')})()

//合并后 --输出file1,然后报错
(function(){console.log('file1')})()(function(){console.log('file2')})()

为了防止自己写的库在合并时内其他代码干扰,所以一般写法为如下代码:

;(function(){ 
	/*Code*/ 
})();

在return、throw、break、continue、++或--的参数之前绝不能换行,看代码:

a
++
b
等价于:
a;++b;

for循环中不要省略分号

//Parse Error
var total=0
for(var i=0,total=1
	i<n
	i++){
	total*=i
}

综上,再次强调,不加分号看起来代码轻量,但稍不注意就会引起很多bug,所以,建议都加上分号,不要让JS环境自行推导

##No.7、视字符串为16位的代码单元序列

待定...

##No.8、尽量少用全局对象 Tips:

  1. 避免申明全局变量
  2. 尽量申明局部变量
  3. 避免对全局对象添加属性
  4. 使用全局对象来做平台特性检测

定义全局变量会污染共享的公命名空间,并可能导致意外的命名冲突。全局变量不利于模块化,因为它会导致程序中独立组件间的不必要耦合。

##No.9、始终声明局部变量 Tips:

  1. 始终使用var声明新的局部变量
  2. 考虑使用lint工具来帮助检查未绑定的变量

如果存在比全局变量更麻烦的事情,那就是意外的全局变量。由于不适用var申明的变量,统统为全局变量,所以一定要使用var来定义变量,防止变量污染。

function test(){
	test='test';
}
test();
window.test;// 'test'

##No.10、避免使用with Tips:

  1. 避免使用with语句
  2. 使用简短的变量名代替重复访问的对象
  3. 显式地绑定局部变量到对象属性上,而不要使用with语句隐式地绑定他们