for(var i=1;i<=5;i++){ setTimeout(function timer(){ alert(i); },i*1000);}在《你不知道的javascript》中,是这么描述这段代码的:缺陷是我们试图假设循环中的每个迭代在运行时都给自己"捕获"一个i的副本。但是根据作用域的工作原理,实际情况是尽管循环中的五个函数是在各个迭代中分别定义的,但是它们都被封闭在一个共享的全局作用域中,因此实际上只有一个i.疑问:只有一个i(为啥i是6)?能不能这么理解?在函数的5次迭代中,每一次在迭代运行时都给自己捕获了一个i的副本。i排序也就是1,2,3,4,5,6;但是,又根据作用域的工作原理(词法作用域的查找规则),这6个i中只能是其中一个i,最后根据i所出现的顺序的先后,6是出现在排序中的最末位,所以这唯一一个i就是6.
添加回答
举报
0/150
提交
取消