1.在全局代码执行之前,JS引擎就会创建一个栈来储存管理所有的执行上下文对象
2.在全局执行上下文(window)确定后,将其添加到栈中(压栈)
3.在函数执行上下文创建后,就将其添加到栈中
4.在当前函数执行完后,将栈顶的元素移除(出栈)
5.当所有的代码执行完毕后,栈中只剩下window
执行上下文栈面试题
(先执行变量提升,在执行函数提升)
1.
function a(){};
var a;
console.log(typeof a); //'function'
2.
if(!(b in window)){
var b=1;
}
console.log(b); //undefined
3.
var c=1;
function c(c){
console.log(c);
var c=3;
}
c(2); //报错,c is not a function
*变量、函数声明提升后代码等于:
- var c;
function c(c){
console.log(c);
var c=3;
}
//上面为变量和函数声明提升部分,下面才是代码执行部分
c=1;
c(2);