函数和变量的提升

74 阅读1分钟

先看一道题,输出对应的结果

    var a = 2
    function fn() {
      b();
      return;
      var a = 1;
      function b() {
        console.log(a);
      }
    }
    fn();

输出: undefined

  • 在编译阶段,JavaScript执行上下文时, 变量和函数的声明会在物理层面移动到代码的最前面
  • 函数和变量相比,会被优先提升。这意味着函数会被提升到更靠前的位置。
  • 只有声明被提升,不会提升初始化
  • 会产生这种情况的场景:
    • 先调用变量、函数,再去声明(不推荐的写法)

因此上述代码执行时,会被调整成如下顺序:

    var a = 2
    function fn() {
      function b() {
        console.log(a);
      }
      var a;
      b();
      return;
      a = 1;

    }
    fn(); // undefined