【发布时间】:2012-11-13 06:06:24
【问题描述】:
可能重复:
Javascript closure inside loops - simple practical example
javascript variable scope/closure in loop after timeout
能否请您一步一步解释为什么结果不同?
片段 A(警报 10)
for(var i=0; i<10; i++) if(i==3) setTimeout(function() {alert(i);}, 100);
片段 B(警报 3)
for(var i=0; i<10; i++) if(i==3) setTimeout((function(p) {
return function() {alert(p);}
} )(i), 100);
【问题讨论】:
-
这个基本问题已经成为这里数百个问题的主题。答案很简单:超时处理程序中引用的
i是来自外部作用域的i,它正在被循环更改。也就是说,只涉及一个i。 -
@Pointy 找到一个副本然后标记它。
-
基本上开始输入带有“javascript”、“loop”和“timeout”或“handler”字样的问题。
标签: javascript parameter-passing