下面这样一下就全部输出出来了for(leti=0;i{console.log(i)},2000)}
2 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
for(leti=0;i<100;i++){(function(i){setTimeout(function(){console.log(i);},1000*i);})(i)}这是因为for循环里定义的i变量其实暴露在全局作用域内,于是多个定时器里的匿名函数它们其实共享了同一个作用域里的同一个变量。所以如果想要0,1,2,3,4的结果,就要在每次循环的时候,把当前的i值单独存下来,怎么存下当前的循环i值??利用闭包的原理,闭包使一个函数可以继续访问它定义时的作用域。而这个新生成的作用域将每一次循环的当前i值单独保存了下来。
添加回答
举报
0/150
提交
取消