Par*_*tte 6 javascript closures lexical-closures lexical-scope
function buildList( list ) {
var i = 0;
var first = function () {
console.log( "in" )
console.log( i );
}
var Second = function () {
console.log( "out" )
first();
}
return Second;
}
var a = buildList( [1, 2, 3] )
console.dir( a );
a(); // Here closure is created which has function first ,Here first also has one closure of itself that means recursive closure
Run Code Online (Sandbox Code Playgroud)
当我在Chrome中看到我的控制台时,它有一个闭包,它首先有一个函数,它本身就有一个闭包,即它有关闭时自身功能的重复循环,有没有人知道这里发生了什么,我很困惑,为什么有infinte闭环
Aclosure是一种特殊的对象,它结合了两个东西:函数和创建该函数的环境。
无需混淆,该行为与此代码的预期相同。这里发生的事情是,当您console.dir( a );在代码中执行操作时,它会返回该Second函数,我认为您很清楚。
现在,当您展开此函数时,它将在的Closure父函数 ( environment function)中显示Second,即buildList。在你的代码中它正在做同样的事情。
现在下一步是扩展 this function buildList,它将向您显示它的子对象,即var i = 0; 和function first。您的控制台已按预期显示。
现在,当您再次打开时,first()它将显示您在的Closure父函数( environment function)中first,即buildList。(与步骤 2 中的操作相同)。
现在它再次重复步骤 3,然后重复步骤 4。依此类推...也许您明白这里发生了什么。