【问题标题】:Confused about Javascript Hoisting对 Javascript 提升感到困惑
【发布时间】:2017-05-06 02:21:42
【问题描述】:
function a(){
  function b(){
  }
}

在上面的javascript代码中,在提升阶段,函数b会被提升吗?或者只是 a 将被提升,因为只有函数 a 在词法上位于全局上下文中。

【问题讨论】:

  • 提升总是发生在每个范围b 被提升,但仅在函数范围内,每当调用 a() 时。
  • 这意味着如果我们不调用a()b 将不会被提升?
  • 这意味着如果您不调用a(),则不会有b,并且您多次调用它就会有尽可能多的bs。对于b,您必须只考虑它所在的范围… { function b(){} } …(即a 函数体),别无其他。

标签: javascript node.js function hoisting


【解决方案1】:

在提升过程中,所有声明都将在父函数声明下方向上移动。

Ex: function fun(){
    a = 10;
    var c = b();
    function b(){}
}

会变成这样

function fun(){
 var a;
 var c;
 function b(){};
 a = 10;
 c = b();
}

【讨论】:

    【解决方案2】:

    函数 a 将被提升到全局范围的顶部(假设 this 在全局范围内),函数 b 将被提升到函数 a 创建的范围的顶部。

    【讨论】:

      【解决方案3】:

      声明被提升到其包含范围的顶部,对于函数b,它是函数a

      函数b 将被提升到函数a 的顶部,但这已经是它所在的位置。

      并且,函数a(基于您的代码)将被提升到全局范围的顶部。

      【讨论】:

        【解决方案4】:

        在调用该函数 (a) 的提升阶段,b 将托管在它出现的范围的顶部(由函数 a 的主体定义的范围)。

        b 不会导出到全局范围。

        【讨论】:

        • 非常感谢,这个插图非常清晰。
        猜你喜欢
        • 2013-06-19
        • 1970-01-01
        • 2014-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-13
        • 2012-07-22
        • 2013-05-13
        相关资源
        最近更新 更多