执行上下文

  • 每次当控制器转到可执行代码的时候,就会进入一个执行上下文。
  1. 单线程
  2. 同步执行,只有栈顶的上下文处于执行中,其他上下文需要等待
  3. 全局上下文只有唯一的一个,它在浏览器关闭时出栈
  4. 函数的执行上下文的个数没有限制
  5. 每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。

生命周期

  1. 创建:生成变量对象-建立作用域链-确定this指向
  2. 执行:变量赋值-函数引用-执行其他代码
  3. 执行完毕后出栈,等待被回收

例子

  var color = 'blue';
  function changeColor() {
    var anotherColor = 'red';
    function swapColors() {
      var tempColor = anotherColor;
      anotherColor = color;
      color = tempColor;
    }
    swapColors();
  }
  changeColor();

过程

  1. 全局上下文
  2. 全局上下文-changeColor()
  3. 全局上下文-changeColor()-swapColors()
  4. 全局上下文-changeColor()
  5. 全局上下文