vara=[];for(vari=0;i
2 回答
当年话下
TA贡献1890条经验 获得超9个赞
问题源于对函数作用域(链)的理解不够深,一下是个人的一点见解,望能帮助到您:vara=[];for(vari=0;i<10;i++){//此处变量i为全局变量,属于外层作用域(window)//此处声明函数,创建函数的作用域(建立作用域链,函数内部能访问外层作用域中的i变量,但此处只是声明,并不执行)a[i]=function(){//函数内部并未定义i变量,当函数执行时通过声明函数时建立的作用域链向上查找变量i//调用a[6]时,for循环已经结束,变量i已经变成10,所以此处打印输出10console.log(i);};}a[6]();//10
至尊宝的传说
TA贡献1789条经验 获得超10个赞
这个题已经问烂了也回答不知道多少遍了i是全局变量函数调用的时候获取i此时i已经循环到了10下面是个简单了例子可以理解为经历了两次循环vari=1;functiona1(){console.log(i)}vari=2;functiona2(){console.log(i)}a1();//2a2();//2解决方法将i变为局部变量es6{leti=1;functiona1(){console.log(i)}}{leti=2;functiona2(){console.log(i)}}a1();//1a2();//2//es6let局部变量for(leti=0;i<10;i++)...//or//自执行函数es5中只有函数内有局部作用域for(vari=0;i<10;i++){a[i]=(function(i){returnfunction(){console.log(i);};})(i)}
添加回答
举报
0/150
提交
取消