一、简单阐述
变量提升其实就是我们在函数内部定义的变量,被提升到函数的首部,此时我们在变量任何地方都是可以访问到该变量的。
造成变量声明提升的原因: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"
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/122851544
内容来源于网络,如有侵权,请联系作者删除!