闭包导致的问题

两个简单的对数组进行循环,然后打印数组的值,对于arr1的数组,可以正常打印出值为1,2, 3,4,5。

但是很难想象,对于arr2循环体的内部,增加了一步window.onresize之后,结果就完全不是我们想象的这样了。

打印2次undefined。

如果单纯打印arr2,则可正常输出数组的值。那么问题必然出在i。

直接console.log(i), 结果为

那么通过函数自执行,将i当参数传入呢?

就能正常输出数组的值了。

事实上就是由于当我们调整浏览器窗体大小的时候,该循环体已经执行完毕,所以i已经为5了,此时打印i即为5,打印arr2[5]则为undefined。

执行两次,完全是浏览器自身问题。

原文地址:https://www.cnblogs.com/zhuhuoxingguang/p/5823672.html