Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量范围的javascript术语_Javascript_Scope - Fatal编程技术网

变量范围的javascript术语

变量范围的javascript术语,javascript,scope,Javascript,Scope,我忘记了javascript中用来描述特定现象的术语。它与内联函数中访问变量的方式有关。我也不太懂这个理论。我隐约记得下面的代码 for(var c = 0; c< 10; c++) { arrayOfObjects[c].onclick = function() {alert(c); }; } for(var c=0;c

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

for(var c = 0; c< 10; c++)
{
  arrayOfObjects[c].onclick = function() {alert(c); };
}
for(var c=0;c<10;c++)
{
arrayOfObjects[c].onclick=function(){alert(c);};
}
我记得当点击一个物体时,警报窗口总是显示10。然后有人解释说这是因为javascript中的所有内容都是对象。甚至function(){blah}也是一个在运行时被计算的对象,这就是为什么我对变量作用域感到困惑的原因

我认为描述这种现象的术语是从字母e开始的。这是一种类似于包裹、封装、圈套之类的东西


我要找的术语是什么?

您要找的术语是(en)闭包


忽略示例代码中的en

,有效的闭包可能如下所示:

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

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

        // cc is sustained in here

        return function () {

            alert(cc);

        }

    }(c);

}
for(var c=0;c<10;c++){
arrayOfObjects[c].onclick=函数(cc){
//cc在这里是持续的
返回函数(){
警报(cc);
}
}(c) );
}
由于最后的
()
,outter函数立即执行,并且'c'作为'cc'传递给它。然后,内部函数被“构造”并为onclick返回。当这个存储的内部函数稍后执行时,它仍然会像构造时一样引用“cc”