目录
1. 作用域是什么:
变量在内存中如何存储,后续使用时如何查找,有一套管理的机制和规则,这个规则就是作用域。换种说法,作用域控制着变量的可访问性,--> 谁能够访问这个变量
2. 词法作用域是什么:
指的是你的代码写在哪里,词法作用域就在哪里。比如函数的词法作用域就是在声明的位置决定好。
3. 作用域链是什么:
当前的作用域,不仅仅包含当前范围内的变量的访问权,还有对上一级的作用域里面的变量的引用,能够向上访问,但是向下访问是不被允许的。
追问
4. 作用域 引擎 编译器的互动
-
var a = 2;这句代码,编译器会问作用域,当前范围内,是否已经声明了a变量,如果声明了,就忽略var a这个声明,否则就会要求作用域来声明
-
代码生成阶段时,引擎也会进行变量的查找,问作用域a变量有没有,有的话就拿来直接用,2赋值给它,没有就往上一级去查找。
分词、词法分析、代码生成,上面两步都在代码生成阶段
5. 作用域链的概念
-
从开发的角度来看,当前范围找不到,就往上面去查找,到底是好还是坏?好处,公共的变量是可以共享的;坏处的话,可能会有“遮蔽效应”,就是最近一级找到了就停止了。但是如果我们想访问上一级别的呢?就不行了
-
从知识点的联系角度,和闭包有关系,闭包之所以能够产生,作用域链是很重要的概念。闭包能够在外面访问里面,向下访问。而作用域是从里面向外面访问,他们两个合体,天下无敌