一个。
var a = array();
for(var i = 0; i< 100;i++) {
var obj = new Obj(parameters);
a.push(obj);
}
乙
var a = array();
var obj;
for(var i = 0; i< 100;i++) {
obj = new Obj(parameters);
a.push(obj);
}
哪一个在处理和记忆方面更快,是否有任何区别?
答案 0 :(得分:2)
执行方面没有区别。在解析代码时,var obj
在两种情况下都被提升到函数作用域的顶部,因此当解释器运行它时,它会产生相同的实际代码。有关吊装的更多信息,请参阅this article。
执行速度应该没有区别(一旦解析),因为两者都编译为相同的实际代码。如果你想看看解析速度是否存在有意义的差异(这似乎不太可能),你必须构建一个测试用例,然后在几个不同的浏览器中测试性能。
如果您想优化性能,那么您可以在您向我们展示的代码中完全消除中间变量:
var a = [];
for (var i = 0; i< 100;i++) {
a.push(new Obj(parameters));
}
对于从可读性角度编写代码的更好方法,有不同的意见。许多人建议所有变量都应在其定义范围的顶部声明。其他人喜欢将它们定义为最接近第一次使用。由于两者都导致相同的实际执行,这更像是一种首选的风格而不是其他任何东西。
在ES6中引入let
关键字后,Javascript中会有块范围,因此使用let obj = new Obj(...)
会有第三个选项,导致与var
不同的执行定义