【发布时间】:2016-08-19 05:55:17
【问题描述】:
'use strict'
function test() {
let t = Date.now();
let p = 0;
for (let i = 0; i < 100000000; i++) {
p += i % 2;
}
console.log(p)
console.log('test: ', Date.now() - t);
}
function test1() {
var t = Date.now();
var p = 0;
for (var i = 0; i < 100000000; i++) {
p += i % 2;
}
console.log(p)
console.log('test1 : ', Date.now() - t);
}
test();
test1();
在 chrome 中运行上面的代码,为什么 test1 比 test 快。是我们的错还是我的错?
50000000
test: 1146
50000000
test1 : 148
【问题讨论】:
-
在 Firefox 中,我看不到这种行为。这两个函数我得到了大约 100 毫秒。
-
我怀疑除了 Chrome 开发人员之外的任何人都可以回答这个问题,并且我怀疑理解 Chrome 实现范围界定内部的这个特殊怪癖是否有用(但我承认我可能错了)。
-
let强制创建额外的范围。创建它可能会浪费一些时间。 -
您期望什么?
var和let在这里做两件不同的事情,let涉及更多的资源分配。此外,let可能还没有优化,因为它相对较新。 -
@Xufox 在一般情况下,每次使用
let循环通过let都会创建一个新的执行环境。在您的具体示例中,可能并非如此,但let是一个全新的功能,即使可以进行优化,也可能尚未完成。