JS 变量作用域导致的一个坑
错误的案例:
funcA = function(){
var obj = []
var numbers = [];
for(var i = 0;i < 100;i++){
var number = numbers[i]= i;
obj[i] = {
doSomething: function(){
console.info(number);
}
};
}
for(var i = 0;i < 100;i++){
obj[i].doSomething();
}
}
funcA();
上述代码执行将输出100次99,而非0~99
原因:var声明的变量作用域在函数内部
for并非一个函数,变量number的作用域在funcA
解决方案:
funcA = function(){
var obj = []
var numbers = [];
for(var i = 0;i < 100;i++){
const number = numbers[i]= i;
obj[i] = {
doSomething: function(){
console.info(number);
}
};
}
for(var i = 0;i < 100;i++){
obj[i].doSomething();
}
}
funcA();
注意: ie11和以前的版本不支持let,ie10和以前的版本不支持const