哪个更好,为什么? for 循环 javascript

Which one is better and why ? for loop javascript

A​​.

    var a = array();
    for(var i = 0; i< 100;i++) {
        var obj = new Obj(parameters);
        a.push(obj);
    }

B.

    var a = array();
    var obj;
    for(var i = 0; i< 100;i++) {
        obj = new Obj(parameters);
        a.push(obj);
    }

哪一个在处理和内存方面更快,有什么区别吗?

在执行方面没有区别。在解析代码时,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 定义。