JavaScript学习(五十八)—作用域链
一、作用域链
- 在每个作用域中都有一个对象,这个对象被称为变量对象。
- 变量对象的作用就是用来管理该作用域下面定义的变量和函数的,也就是在该作用域下面定义的变量和函数都可以被看做是变量对象的属性和方法。
- 全局作用域下面的变量对象就是window对象。
二、那么到底什么是作用域链?
- 即在函数内部有一个属性[Scope]属性,该属性指向一个集合,这个集合保存的就是当前函数作用域下面变量对象的地址和它上级作用域变量对象的地址,我们把这个集合就称为作用域链。
- 当在使用变量时,会先从当前作用域下面变量对象身上查找是否有这个变量,如果有则返回其对应的值。
- 如果没有则沿着作用域链向上级对象身上查找,如果有则返回对应的值,如果没有则继续向上级作用域中查找,当找到window对象时依然没有查找到,则报错。
文字太抽象了,画图解释一下吧,先看下面这段小代码