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

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

一、简单阐述

  1. 变量提升其实就是我们在函数内部定义的变量,被提升到函数的首部,此时我们在变量任何地方都是可以访问到该变量的。
  2. 造成变量声明提升的原因:js引擎在执行代码前会先有一个代码解析的过程,在代码解析的过程中会创建一个对
  3. 象,该对象包含着一些在函数内部定义的变量,其值为undefined,还存在一些形参变量。该对象会放入该函数的
  4. 作用域链中的顶部。然后当执行代码时会给变脸进行赋值,以及执行函数的代码。当在执行过程中遇到的变量可以
  5. 沿着作用域链进行查找,直到找完全局作用域。

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

  1. function foo(a) {
  2. var b = 2;
  3. function c() {}
  4. var d = function() {};
  5. b = 3;
  6. }
  7. foo(1);

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

  1. AO = {
  2. arguments: {
  3. 0: 1,
  4. length: 1
  5. },
  6. a: 1,
  7. b: undefined,
  8. c: reference to function c(){},
  9. d: undefined
  10. }

代码执行

  1. AO = {
  2. arguments: {
  3. 0: 1,
  4. length: 1
  5. },
  6. a: 1,
  7. b: 3,
  8. c: reference to function c(){},
  9. d: reference to FunctionExpression "d"
  10. }

相关文章