3. 拒绝使用with语句。 它会导致当你引用这个变量时去额外的搜索这样的一个命名空间,with里的代码在编译时期是完全未知的。
原因明确,不过使用with语句,代码会非常简洁,我个人还是经常使用这个语句的。
4. 使用for()循环替代for…in循 环。因为for…in循环在开始循环之前需要Script引擎创建一个含有所有可循环属性的 List,需要多检查一次。
原因明确,没有补充。
5. 把try-catch语句放在循环外面,不要放在循环里面,因为异常是很少发生的,放在外面避免每次都要执行 它们。
原因明确,这是我认为使用任何语言都有必要遵守的准则。
6. 甚至圣经里都提到过这个 – 不要全局的。全局变量的生命周期贯穿整个脚本的生命周期,而本地变量的存在范围随着本地命名空间的销毁而消失。当在函数或其它地方引用一个全局变量时,脚 本引擎需要搜索整个全局命名空间。
防止内存泄漏和提高查找解析速度,另外,变量定义在最小使用范围内,代码的可读性好。
7. fullName += 'John'; fullName += 'Holdings';执行速度快于fullName += 'John' + 'Holdings';
还是采用测试代码:
01 |
function testString1() { |
02 |
var startTime = new Date(); |
03 |
for (var i=0; i<500000; i++) { |
04 |
var fullName = "" ; |
05 |
fullName += 'John' ; |
06 |
fullName += 'Holdings' ; |
07 |
} |
08 |
var endTime = new Date(); |
09 |
document.getElementById( 'divShowTime1' ).innerHTML = '耗时1:' + (endTime - startTime) + 'ms' ; |
10 |
} |
11 |
function testString2() { |
12 |
var startTime = new Date(); |
13 |
for (var i=0; i<500000; i++) { |
14 |
var fullName = "" ; |
15 |
fullName += 'John' + 'Holdings' ; |
16 |
} |
17 |
var endTime = new Date(); |
18 |
document.getElementById( 'divShowTime2' ).innerHTML = '耗时2:' + (endTime - startTime) + 'ms' ; |
19 |
} |
测试结果:
IE8 | Firefox | Chrome | |
1 |
耗时1:492ms |
耗时1:151ms |
耗时1:52ms |
2 |
耗时1:532ms |
耗时1:150ms |
耗时1:50ms |
3 |
耗时1:493ms |
耗时1:148ms |
耗时1:53ms |
4 |
耗时1:491ms |
耗时1:204ms |
耗时1:51ms |
测试结果出乎意料,在IE8和chrome中,两者的效率差不多,但是在Firefox中,第一种写法反而比第二种慢很多。IE6下测试也是如此,看来这条规则还有待进一步研究。