该变量范围事物的javascript术语

时间:2012-04-28 19:36:41

标签: javascript scope

我忘记了javascript中用来描述特定现象的术语。它与内联函数中访问变量的方式有关。我也不太了解这个理论。我依稀回想起以下代码

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

我记得当点击一个对象时,警告窗口始终打印10.然后有人解释了它,因为javascript中的所有内容都是一个对象。甚至function(){blah}是一个在运行时被评估的对象,这就是为什么我对变量范围感到困惑。

我认为描述这种现象的术语始于字母e。它就像包裹,封装,或包裹,或类似的东西。

我在寻找什么术语?

2 个答案:

答案 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',就像它在构造时一样。