在Javascript中重复关闭

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闭环

Man*_*dhi 2

Aclosure是一种特殊的对象,它结合了两个东西:函数和创建该函数的环境。

  1. 无需混淆,该行为与此代码的预期相同。这里发生的事情是,当您console.dir( a );在代码中执行操作时,它会返回该Second函数,我认为您很清楚。

  2. 现在,当您展开此函数时,它将在的Closure父函数 ( environment function)中显示Second,即buildList。在你的代码中它正在做同样的事情。

  3. 现在下一步是扩展 this function buildList,它将向您显示它的子对象,即var i = 0;function first。您的控制台已按预期显示。

  4. 现在,当您再次打开时,first()它将显示您在的Closure父函数( environment function)中first,即buildList。(与步骤 2 中的操作相同)。

现在它再次重复步骤 3,然后重复步骤 4。依此类推...也许您明白这里发生了什么。