为什么VaR声明比让快
why var declaration fast than let
'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
值得
一提的是,在 es6 中,for-loop 中的 let
关键字旨在解决 JavaScript 中臭名昭著的循环闭包问题:
var log = msg => div.innerHTML += msg + "<br>";
for (var i=0; i < 3; i++) {
Promise.resolve().then(() => log(i)); // 3, 3, 3
}
for (let i=0; i < 3; i++) {
Promise.resolve().then(() => log(i)); // 0, 1, 2
}
<div id="div"></div>
正如@loganfsmyth在注释中提到的,它通过有效地为循环的每次迭代创建一个新的闭包来实现这一点。
这一点,以及该功能是新功能的事实,可能是Chrome中看到的一些性能差异的原因。也就是说,对于您的特定示例,Firefox 似乎没有区别,因此浏览器似乎可以对此进行优化。
相关文章:
- 一个'var'在函数内部声明
- 在for循环中声明i时使用var
- 什么's;var'声明的变量和'这'在Javascript中创建了属性
- 为什么VaR声明比让快
- 多次声明var而不是使用.find
- 为什么我的变量需要一个'var'声明,当它's已经在var声明中了
- Javascript变量声明:什么是“;var myVariable={}”;
- Node.js上VAR的声明
- 具有多个逗号分隔值的变量声明是什么意思(例如 var a = b,c,d;)
- 如何在此 var 声明中获取此数组的第一个元素
- 如何在使用 javascript 声明 var 之前检查元素有或没有
- 在 Javascript 中声明 var 用于循环声明
- 在Javascript中分配多个值之前先声明var
- Javascript:为什么我需要在for循环中声明var I=0
- 在jquery.live()中声明var,它可以在所有函数中使用
- 声明var that = this的原因是什么?在javascript
- 提升未声明'var'的JS变量
- 为什么没有在object方法中声明var的变量不会成为全局变量
- 在unray表达式中声明var
- 重新声明var console