先上个例子
let obj={o:"o",o1:"o1"};
for(let i in obj){
setTimeout(function(){
console.log(i);
});
}
输出结果:
惊不惊喜意不意外?
哇嘎嘎,原来在循环中使用let声明循环变量i,每次循环都会声明一块新的内存去保存此次的循环变量值,虽然是同一个名称i。
优化使用var声明
let obj={o:"o",o1:"o1"};
for(var i in obj){
setTimeout(function(){
console.log(i);
});
}
输出结果:
使用var声明的循环变量只会保留一块内存,每次只是给这块内存赋值而已。i指向的是同一个指针。