将参数传递给javascript函数

时间:2012-11-25 17:18:37

标签: javascript parameter-passing

  

可能重复:
  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);

1 个答案:

答案 0 :(得分:4)

变量的范围是全局范围(浏览器中的window)或函数。

在第一种情况下,i在包含for循环的范围中定义。这就是为什么在执行给setTimeout的回调之前它仍然会在循环结束之前发生变化的原因。

在第二种情况下,中间函数包含并保留另一个变量p。请注意,这可以在没有测试的情况下工作,因为对于每个setTimeout来说这将是一个不同的闭包。