变量范围的javascript术语
我忘记了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
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”