执行上下文
执行上下文的类型:
- 全局执行上下文
- 函数执行上下文
- Eval函数执行上下文(很少用)
执行栈:也叫调用栈,LIFO,用于存储代码执行时创建的上下文; 执行上下文分为两个阶段:创建阶段、执行阶段
创建阶段:
- 确定this,This Binding
- LexicalEnvironment
- VariableEnvironment (含let、const时创建)
变量提升
- 变量提升
foo; // undefined
var foo = function () {
console.log('foo1');
}
foo(); // foo1,foo赋值
var foo = function () {
console.log('foo2');
}
foo(); // foo2,foo重新赋值
- 函数提升
foo();
function foo() {
console.log('foo1');
}
foo();
function foo() {
console.log('foo2');
}
foo();
// foo2 foo2 foo2
- 函数提升 > 变量提升
foo();
var foo = function() {
console.log('foo1');
}
foo();
function foo() {
console.log('foo2');
}
foo();
// foo2, foo1, foo1