for(var i = 1;i<=5;i++){
setTimeout(function timer(){
console.log(i);
},i*1000);
}
以上代码输出都是6。因为整个过程中只有i一个变量,所有循环共享i变量,循环执行完毕(定时器执行之前)后i为6
for(var i = 1;i<=5;i++){
let j = i;
setTimeout(function timer(){
console.log(j);
},j*1000);
}
以上代码正常了输出1 2 3 4 5,因为每次循环中的j都是独立的
以上代码可以简洁一些:
for(let i = 1;i<=5;i++){
setTimeout(function timer(){
console.log(i);
},i*1000);
}
i使用了let关键字后,每次迭代都会声明一个新的变量。输出位1 2 3 4 5
标签:闭包,变量,js,循环,let,var From: https://www.cnblogs.com/dongfangchun/p/18026399