1.作用域
1.1 什么是作用域?
作用域就是定义变量的区域,它决定了当前执行代码对变量的访问权限。
1.2 作用域的分类
- 全局作用域:最外层作用域,一直存在。
- 函数作用域:函数被定义时会创建。
- 块级作用域:let、const、try catch
执行代码可以访问到自己的作用域和外层作用域中的变量,而无法访问到内层作用域。
1.3 作用域链
function foo(a) {
var b = a * 2;
function bar(c) {
console.log( a, b, c );
}
bar(b * 3);
}
foo(2); // 2 4 12
观察如上代码,bar函数内部会做三次RHS查询,但是bar内部只能获取到c的值,a和b都是从外部的foo函数的作用域中获取到的。
也就是说当可执行代码内部访问变量时,会先查找本地作用域,如果找到目标变量则返回,否则就继续去父级作用域中继续查找,一直查找到全局。这种作用域的嵌套机制,我们称为作用域链。
1.4 词法作用域
我们知道函数在被定义时,作用域也就确定了,和在哪里调用无关,所以这个作用域叫做词法作用域,也叫静态作用域。