2012-04-28 50 views
0

我忘了在javascript中用来描述一个特定现象的术语。它与内联函数中访问变量的方式有关。我也不太了解这个理论。我依稀记得下面的代码关于那个变量作用域的东西的javascript术语

for(var c = 0; c< 10; c++) 
{ 
    arrayOfObjects[c].onclick = function() {alert(c); }; 
} 

我记得在对象上点击时,警报窗口始终打印10后来有人解释说这是因为一切都在JavaScript是一种对象。即使function(){blah}是一个在运行时被评估的对象,这就是为什么我对变量作用域感到困惑。

我认为术语来描述这个phenonmenon开头字母e。它就像是包裹,封装或者包裹,或者类似的东西。

我在找什么术语?

回答

2

你正在寻找的术语是(EN)关闭

忽略EN

+0

Yah!而已。我希望我可以马上检查标记你的anwer .... – John 2012-04-28 19:42:32

0

在你的示例代码,有效闭幕可能看起来像:

for(var c = 0; c< 10; c++) { 

    arrayOfObjects[c].onclick = function(cc) { 

     // cc is sustained in here 

     return function() { 

      alert(cc); 

     } 

    }(c); 

} 

由于最后的(),outter函数立即执行,'c'被传入“抄送”。内部函数然后'构造'并返回onclick。当这个存储的内部函数稍后执行时,它仍然会像在构建时那样引用'cc'。