for (var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 100 * i); }
想一想打印结果是啥?闭包
没错是10次10,为何不是咱们想要的0,1,2,3,4,5,6,7,8,9?
开始我也很纳闷,一直想不明白。找了不少资料才终于想明白了。其实网上说的不少什么异步,闭包等等,我以为解释的不是很容易明白。异步
其实简单点来讲:
1.这个for循环确定是循环10次的,因此结果为何是10个10
2.由于setTimeout方法是在for循环结束以后再执行的,for循环很是的快,结束以后的i是10.
3.在这个for循环当中的setTimeout是会执行10次的。因此结果10个10,可能这样还很多很明白。咱们改一下这个例子code
for (var i = 0; i < 10; i++) { console.log(123); }
这里咱们在for循环里随便打印个什么东西,你会发现最后都是执行了10次。。。
so,到这里我终于明白了。为何最上面的结果是10个10了。io
最后要想打印0到9,有不少方法了。例如:console
for (var i = 0; i < 10; i++) { console.log(i); }
这样直接打印就行了。。。或者把var或者let。。。for循环