for(leti=0;i
2 回答
慕森卡
TA贡献1806条经验 获得超8个赞
因为let具有块级作用域的特性,因此i只会在当前循环有效。实际上你的循环创建了5个块级作用域,每一个i值都只在当前的块级作用域中有效果。你的代码等同于如下:"usestrict";var_loop=function_loop(i){a[i]=function(){console.log(i);};};for(vari=0;i<5;i++){_loop(i);}a[2]();这里就很容易能看出:实际上let的存在让每一个i值都保存在了一个闭包中。因此这个循环创建了5个闭包。而a数组里则保存了一堆函数,每一个函数都访问了对应的闭包中的i值。所以i的值肯定是存在的而不undefined。当你看不懂ES6语法相关的代码时,可以利用babel的在线工具将ES6的例子转换成ES5的代码。在线地址
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
你这不是创建了5个函数吗?a[0]=function(){console.log(0);}a[1]=function(){console.log(1);}a[2]=function(){console.log(2);}.....
添加回答
举报
0/150
提交
取消