- 在全局代码执行前, JS引擎就会创建一个栈来存储管理所有的执行上下文对象
- 在全局执行上下文(window)确定后, 将其添加到栈中(压栈)
- 在函数执行上下文创建后, 将其添加到栈中(压栈)
- 在当前函数执行完后,将栈顶的对象移除(出栈)
- 当所有的代码执行完后, 栈中只剩下window
```javascript /* 1. 依次输出什么? gb: undefined fb: 1 fb: 2 fb: 3 fe: 3 fe: 2 fe: 1 ge: 1//1. 进入全局执行上下文
var a = 10
var bar = function (x) {
var b = 5
foo(x + b) //3. 进入foo执行上下文
}
var foo = function (y) {
var c = 5
console.log(a + c + y)
}
bar(10) //30 //2. 进入bar函数执行上下文
- 整个过程中产生了几个执行上下文? 5 */
console.log(‘global begin: ‘+ i) var i = 1 foo(1); function foo(i) { if (i == 4) { return; } console.log(‘foo() begin:’ + i); foo(i + 1); console.log(‘foo() end:’ + i); } console.log(‘global end: ‘ + i) ```