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