什么是作用域?
  一个变量可用的范围
1、全局作用域window:全局变量
  在程序的任何位置都能反复使用===》全局污染
2、函数作用域:局部变量
  局部变量(AO:Action Object):仅在函数内可用
函数的生命周期:
  1)开始执行前(生命提前阶段)
  创建执行环境栈(数组):临时保存正在执行的函数执行环境
  向执行环境中添加一个默认程序main(),该方法创建出一个全局作用域的对象window

JavaScript作用域-LMLPHP

  2)定义函数时

      创建函数对象,封装函数的定义

      声明函数变量,引用了函数对象,函数对象的scope属性引用,创建函数时的作用域

  3)调用函数时
     在ECS中加入一个新的元素(执行环境)记录新函数的调用
    创建一个活动对象,保存本次调用用到的局部变量(函数的参数,在函数体内使用var关键字声明的数据)
    ESC中的新执行环境元素 ,引用活动对象
     活动对象中的parent属性引用函数的scope指向的父级作用域对象

JavaScript作用域-LMLPHP

  4)调用函数后
     执行环境栈中本次函数的执行环境出栈
     导致活动对象被释放,导致局变量一同释放

 JavaScript作用域-LMLPHP

作用域链
  右多级作用域连续引用形成的链式结果
  掌握一切变量的使用顺序 :先在局部找,没有则延作用域链向父级作用域中找

 JavaScript作用域-LMLPHP

08-05 17:19