JavaScript 中的作用域与变量声明提升

x33g5p2x  于2022-02-12 转载在 JavaScript  
字(0.6k)|赞(0)|评价(0)|浏览(264)

一、简单阐述

变量提升其实就是我们在函数内部定义的变量,被提升到函数的首部,此时我们在变量任何地方都是可以访问到该变量的。

造成变量声明提升的原因:js引擎在执行代码前会先有一个代码解析的过程,在代码解析的过程中会创建一个对
象,该对象包含着一些在函数内部定义的变量,其值为undefined,还存在一些形参变量。该对象会放入该函数的
作用域链中的顶部。然后当执行代码时会给变脸进行赋值,以及执行函数的代码。当在执行过程中遇到的变量可以
沿着作用域链进行查找,直到找完全局作用域。

下面会对其具体的流程步骤进行阐述。
如果对于变量的作用域链不熟悉,可以参考执行的文章:闭包,闭包详解
二、具体例子实现

function foo(a) {
  var b = 2;
  function c() {}
  var d = function() {};

  b = 3;

}

foo(1);

我们知道代码执行时会经过两个阶段,一个是解析阶段,一个是执行阶段。
代码解析

AO = {
    arguments: {
        0: 1,
        length: 1
    },
    a: 1,
    b: undefined,
    c: reference to function c(){},
    d: undefined
}

代码执行

AO = {
    arguments: {
        0: 1,
        length: 1
    },
    a: 1,
    b: 3,
    c: reference to function c(){},
    d: reference to FunctionExpression "d"
}

相关文章