我忘记了javascript中用来描述特定现象的术语。它与内联函数中访问变量的方式有关。我也不太了解这个理论。我依稀回想起以下代码
for(var c = 0; c< 10; c++)
{
arrayOfObjects[c].onclick = function() {alert(c); };
}
我记得当点击一个对象时,警告窗口始终打印10.然后有人解释了它,因为javascript中的所有内容都是一个对象。甚至function(){blah}是一个在运行时被评估的对象,这就是为什么我对变量范围感到困惑。
我认为描述这种现象的术语始于字母e。它就像包裹,封装,或包裹,或类似的东西。
我在寻找什么术语?
答案 0 :(得分:2)
您正在寻找的术语是(en)Closure
忽略en
答案 1 :(得分:0)
在您的示例代码中,有效的 CLOSURE 可能如下所示:
for(var c = 0; c< 10; c++) {
arrayOfObjects[c].onclick = function(cc) {
// cc is sustained in here
return function () {
alert(cc);
}
}(c);
}
由于最后的()
,outter函数立即执行,'c'作为'cc'传递给它。然后“构造”内部函数并返回onclick。当这个存储的内部函数稍后执行时,它仍将引用'cc',就像它在构造时一样。