这段代码工作,每个回调引用一个不同的i
,这表明对于每个循环迭代,创建一个新的i
副本,由于回调形成一个闭包,具有不同的"i";每一次
const arr = [10, 12, 15, 21];
for (let i = 0; i < arr.length; i++) {
setTimeout(function() {
console.log('Index: ' + i + ', element: '+ arr[i]);
}, 3000)
}
给出错误:赋值给常量变量。在这种情况下,为什么不为每个循环迭代创建一个新的常数i
?
const arr = [10, 12, 15, 21];
for (const i = 0; i < arr.length; i++) {
setTimeout(function() {
console.log('Index: ' + i + ', element: '+ arr[i]);
}, 3000)
}
因为常量不能被修改,所以你不能在常量上使用i++。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
++i
不修改i
的实例-它创建了一个新的实例,并将其赋值给i
。如果i
被定义为const
,则不能将值赋给它,因此会出现错误。