作用域
什么是作用域:
一个 JS 数据起作用的范围
作用域的分类:
全局作用域:
- 直接写在 script 标签中的代码
- 在 JS 代码运行时创建,关闭时销毁
- 全局作用域中有 window 对象,由浏览器创建,可以直接使用
- 变量会作为 window 对象的属性保存
- 函数会作为 window 对象的方法保存
- 全局作用域内的变量都是全局的,都可以访问到
- 全局作用域中有声明提前
函数作用域:
-
调用函数时才有函数作用域
-
每次调用函数,都会产生不同的作用域,相互之间都是独立的
-
函数作用域内内的变量可以访问到全局变量
- 函数作用域内访问全局变量,可以使用 window.变量名
- 全局不能访问到函数作用域内的变量
-
函数作用域内部的变量会被优先使用(就近原则)
- 如果函数内部没有该变量会向上方的作用域查找,直到找到全局
-
函数中也有声明提前
-
作用域的作用:
- 隔离变量
作用域链
- 连续引用多级作用域时形成的链式操作
- 也可以称为用来查找变量的一系列的过程
- 作用域链由:
当前的作用域+[[scope]]属性组成[[scope]],是系统内部使用的,我们无法访问,这个属性中存储了函数定义的作用域的层级