诡异的 666
如果有下面这段代码,你觉得应该输出什么?
let
感觉上应该输出 0,1,2,3,4,5
但它实际的输出却是 666666!
setTimeout 代表忙完手头的事之后,马上执行 xxx,关键在于手头的事,是否改变了 i
因为循环先执行完,此时 i = 6,然后再执行 setTimeout,所以就会输出 666666
有私情的 let 和 for
那如何才能输出 0,1,2,3,4,5 呢?
JS 给出的答案是把 let 写在 for 里面
for
因为 JS 在 for 和 let 一起用的时候会添加操作,每次循环都会把 i 复制一份,留在这个空间
所以最后输出的就是留在这个空间的 i,也就是 0,1,2,3,4,5 了
被遗弃的立即执行函数
那还有没有别的办法输出 0,1,2,3,4,5 呢?
让我们试试 let 出现后,被遗弃的立即执行函数吧
let
每次循环定义一个立即执行函数,并将 i 作为参数传给这个函数,那输出的值就不会随着 i 的变化而变化了,因此输出的结果自然就是 0,1,2,3,4,5 咯