JS作用域和作用域链

作用域(scope):一个变量的可用范围

两种:全局作用域,任何地方都可以访问,反复使用

   函数作用域,仅在函数内部可访问,不能重复使用

函数的生命周期
  1、开始执行前:
    创建执行环境栈(ECS数组):临时保存正在执行的函数的环境
    向执行环境栈中加入第一个默认函数main()
    创建全局作用域对象window
2、定义函数时:
    创建函数对象,封装定义
    声明函数名变量,引用函数对象
    函数对象的scope属性引用回,创建函数时的作用域
3、调用函数时:
    ESC中加入一个新的元素(执行环境),记录新函数调用
    创建一个活动对象,保存本次函数调用用到的局部变量
    ESC新执行环境元素,引用活动对象
    活动对象中的parent属性引用函数的scope指向的父级作用域对象
    在执行过程中:优先使用活动对象中的局部变量
    局部中没有,才延parent向父级作用域找
4、调用函数后:
    执行环境栈中本次函数的执行环境出栈
    导致活动对象被释放 导致局部变量一同释放

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

原文地址:https://www.cnblogs.com/yeming980912/p/10928207.html