下面代码最终会输出什么?为什么?如何解决?
var a=[];
for(var i=0; i<10; i++){
a[i] = function() {
console.log(i)
}
}
a[6]();
下面代码最终会输出什么?为什么?如何解决?
var a=[];
for(var i=0; i<10; i++){
a[i] = function() {
console.log(i)
}
}
a[6]();
a[6]() 的最终结果是 10。
原理全局变量 i,在 for 循环执行过后,就自增长到 10 了。
解决方式:
1、使用立即执行函数( IIFE :函数表达式(Immediately Invoked Function Expression) )
2、使用 let 声明块级变量
等
事件示例:
for(var i=0; i<10; i++) {
document.querySelector(`#li_${i}`).onclick = ((index) => {
return (e) => {
console.log(e, index)
}
})(i)
}
微信小程序:前端开发宝典