Js作用域与作用域链

93 阅读1分钟

作用域

什么是作用域:

一个 JS 数据起作用的范围

作用域的分类:

全局作用域:
  • 直接写在 script 标签中的代码
  • 在 JS 代码运行时创建,关闭时销毁
  • 全局作用域中有 window 对象,由浏览器创建,可以直接使用
  • 变量会作为 window 对象的属性保存
  • 函数会作为 window 对象的方法保存
  • 全局作用域内的变量都是全局的,都可以访问到
  • 全局作用域中有声明提前
函数作用域:
  • 调用函数时才有函数作用域

  • 每次调用函数,都会产生不同的作用域,相互之间都是独立的

  • 函数作用域内内的变量可以访问到全局变量

    • 函数作用域内访问全局变量,可以使用 window.变量名
    • 全局不能访问到函数作用域内的变量
  • 函数作用域内部的变量会被优先使用(就近原则)

    • 如果函数内部没有该变量会向上方的作用域查找,直到找到全局
  • 函数中也有声明提前

  • 作用域的作用:

    • 隔离变量

作用域链

  • 连续引用多级作用域时形成的链式操作
    • 也可以称为用来查找变量的一系列的过程
  • 作用域链由:当前的作用域+[[scope]]属性组成
    • [[scope]],是系统内部使用的,我们无法访问,这个属性中存储了函数定义的作用域的层级