这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战
作用域是什么?
作用域是规则,什么意思?
计算机中最有意思的就是可以存储变量并改变其值,那么如何存储? 作用域的作用就在这 - 根据名称 查找变量 规则.
整个的查找会分为左侧查找(LHS)和右侧查找(RHS).
为什么要区分左侧和右侧:左侧查找是查找是否创建过该变量,非严格模式下没创建就自动帮忙创建,右侧查找是查找该变量是否声明过,如果未创建就会报错.左侧相当于分配内存空间,右侧是变量直接使用.如果是严格模式,左侧未创建会报错.
所以总体而言: 作用域是
一套规则,用于确定在何处如何查找变量,如果目的是为变量赋值,就进行LHS, 如果是获取变量的值,就进行RHS
词法作用域
词法作用域: 作用域是 函数声明的位置决定. 可通过eval() 和with()进行修改.
eval()是修改已存在的词法作用域,with()是创建新的词法作用域.
由于使用了eval()和with()后, 引擎不知道内部代码做了哪些修改,就不会在编译时进行作用域优化,影响性能.
作用域链
作用域是根据名称查找变量的规则,那么作用域链是什么? 当作用域和作用域之间有嵌套关系时,查找某一个变量,在当前作用域没有找到,就去其上级作用域查找,一直找到全局作用域停止, 整个作用域查找的链路就叫做作用域链.