(九)执行上下文&变量提升案例分析

执行上下文的三个重要属性:
  • 变量对象VO (变量;函数声明;函数的形参)
  • 作用域链(JS采用词法作用域;其作用域在其定义时候就已经决定)
  • this

在生成上下文的时候会有两个阶段

  • 第一阶段(创建阶段):
    • JS解释器会找出需要变量提升的变量以及函数,给他们开辟好内存空间
    • 函数会整个存进去
    • 变量只声明并且赋值为undefined
    • 变量提升过程中;相同函数会覆盖上一个函数并且函数优先于变量提升
b() // call b
console.log(a) // undefined

var a = 'Hello world'		//变量声明并赋值为unedfined

function b() {				//创建VO时候偶函数整个保存
	console.log('call b')
}
  • 第二阶段(代码执行阶段)
b() // call b second

function b() {
	console.log('call b fist')
}
function b() {					//变量提升;同样函数后面一个会覆盖前面一个
	console.log('call b second')
}
var b = 'Hello world'
注意
  • let不能在声明前使用;let并非是没有变量提升才不能在声明前使用;而是let提升了声明但是并没有赋值,其不能在声明前使用是因为临时死区
原文地址:https://www.cnblogs.com/smileyqp/p/12675330.html