"下面代码最终会输出什么?为什么?如何解决?\n\n```\nvar a=[];\nfor(var i=0; i<10; i++){\n a[i] = function() {\n console.log(i)\n }\n}\na[6]();\n```"

下面代码最终会输出什么?为什么?如何解决?

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)
}
PS:写作不易,如要转裁,请标明转载出处。
登录
注册
回顶部