0

我忘记了 javascript 中用来描述特定现象的术语。它与内联函数中访问变量的方式有关。我也不是很明白这个理论。我依稀记得下面的代码

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

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

我认为描述这种现象的术语以字母 e 开头。它类似于包裹,或封装,或诱捕,或类似的东西。

我在找什么词?

4

2 回答 2

2

您正在寻找的术语是 (en)Closure

忽略 en

于 2012-04-28T19:39:24.187 回答
0

在您的示例代码中,有效的CLOSURE可能如下所示:

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

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

        // cc is sustained in here

        return function () {

            alert(cc);

        }

    }(c);

}

()由于末尾的,外部函数立即执行,并且'c'作为'cc'传递给它。然后“构造”内部函数并为 onclick 返回。当这个存储的内部函数稍后执行时,它仍然会像构造时一样引用“cc”。

于 2012-04-29T10:53:11.613 回答