【问题标题】:Hoisting in javascript along with global variable在javascript中与全局变量一起提升
【发布时间】:2019-10-24 13:10:12
【问题描述】:

下面的代码给出了undefined 的输出。我的印象是所有变量和函数声明都被提升到其作用域的顶部,因此b 现在应该在调用a() 之前位于作用域的顶部。但是,我仍然得到undefined 作为我的输出?

a()

var b = 5;
function a() {
  console.log(b)
}

【问题讨论】:

标签: javascript hoisting


【解决方案1】:

您误解了提升的工作原理。它不会提升 assignment,它只会提升 declaration。您的代码相当于以下内容:

var b; // undefined
function a(){
 console.log(b)
}
a();
b = 5;

【讨论】:

    【解决方案2】:

    是的,变量声明已提升,但未在 b 上设置值。代码是这样的

    var b
    function a(){
     console.log(b)
    }
    a()
    b = 5;

    【讨论】:

      【解决方案3】:

      提升意味着变量将在“顶部”创建 - 但它不会改变 赋值 发生的时间,b = 5 部分仍然当执行到达它被写入的部分时发生。因此,如果您在此之前调用a()b存在,但尚未获得任何分配的值……因此,undefined

      【讨论】:

        【解决方案4】:

        您正在使用函数声明来创建函数。所以函数声明也被提升了,所以它们在声明之前就被使用了。

        【讨论】:

          猜你喜欢
          • 2015-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-01
          • 2015-06-22
          相关资源
          最近更新 更多