作用域查找规则

64 阅读1分钟

当访问变量时,JavaScript引擎按以下顺序查找:

  1. 当前作用域:优先查找当前函数或块内的变量。
  2. 外层作用域:若当前作用域未找到,逐级向外层函数或块查找。
  3. 全局作用域:若所有外层作用域未找到,最后查找全局作用域。
  4. 未找到:抛出 undefined

当查找一个变量时,真实的查找路径是沿着作用域链来查找

示例: VO里边的作用域链除了包含本身(AO)外,还包含父级作用域(GO) image.png

函数里边嵌套函数

第一步: 除了之前的步骤,因为嵌套了函数会再次分配一块存储空间给bar image.png

第二步: 给AO里边的内容赋值 image.png

第三步: 再创建一个函数上下文,开始执行bar里边的内容

image.png

第四步: 执行完成之后,会销毁函数上下文,AO image.png

函数调用函数的作用域查找: 编译期间先创建全局对象,遇到函数会分配存储函数的空间

image.png 然后会执行代码来赋值,创建函数上下文

image.png 注意:函数的父级作用域是和定义的位置有关系,和在哪调用没有关系,在存储函数的时候就已经确定好父级作用域是什么了