下面代码最终会输出什么?为什么?如何解决?
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)
}