【问题标题】:Why the variable b is not hoisted in this example?为什么在这个例子中变量 b 没有被提升?
【发布时间】:2016-08-16 14:39:07
【问题描述】:

我正在阅读 Javascript Definitive 指南,我遇到了关于函数范围的声明:“JavaScript 的函数范围意味着在函数中声明的所有变量都是可见的在整个函数体中
由于 bar() 在其中有一个变量 b ,而该变量又在函数 foo() 中声明。为什么在这种情况下不提升 b 并且输出不是未定义的(内部变量 b 应该在整个 foo() 的主体中可见)?

var b =5 ; 
    function foo(x)
    {
      console.log(b);
      function bar()
      {
       var b=4;
      }

    }
    foo(4);

【问题讨论】:

  • 您自己回答问题。由于 bar 是一个函数,因此 b 的作用域为 bar。并且对 foo 是不可见的。只有 bar 对 foo 可见,但 bar 内的所有内容均不可见。

标签: javascript hoisting


【解决方案1】:

bar 内的b 的范围bar 函数。变量在其函数之外是不可见的。这意味着 all 变量将在全局范围内可见,因为它们都会向上传播到全局范围/最外层函数中。这正是范围应该防止的。

b 被提升在其作用域函数内,即bar;不是foo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多