自我理解
作用域:变量可以起作用的范围
变量属于哪个作用域 和作用域链 是看声名的时候确定的 如果 有调用 只是改变调用时候的临时改变
当变量赋值的时候,会优先在当前作用域查找,如果没有就向上查找,直到找到为止,当在全局作用域window都没有找到变量的时候,会在全局作用域创建一个变量, 并赋值。作用域链只能向上查找。
只有函数可以制造作用域结构, 那么只要是代码,就至少有一个作用域, 即全局作用域。凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。
作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期
作用域链的赋值规则
-
在给变量赋值的时候, 首先会去当前作用域查找, 如果有直接赋值, 并停止查找
-
如果没有, 会去自己的父级查找, 在父级找到直接修改值然后停止查找, 如果没有继续向自己的父级查找, 直到找到全局作用域
-
在全局作用域内, 找到直接赋值修改他的值, 如果没有找到, 那么会在全局作用域创建一个变量, 并赋值
只有函数可以制造作用域结构, 那么只要是代码,就至少有一个作用域, 即全局作用域。凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。
将这样的所有的作用域列出来,可以有一个结构: 函数内指向函数外的链式结构。就称作作用域链。
作用域理解
- 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 window 对象即被终止,作用域链向下访问变量是不被允许的
- 简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期