JavaScript 变量的作用域链
作用域链本质上就是使用的是哪个变量,全局变量,局部变量,自身的变量。这个在看别人代码的逻辑的时候非常有用,底层是变量的查找机制。
- 嵌套关系的作用域窜连起来形成了作用域链
- 在函数被执行,会优先查找当前函数作用域中的变量。
- 如果当前函数作用域找不到,则会逐级查找父级作用域,知道全局作用域
- 相同作用域链中按着从小到大的规则查找变量
- 子作用域能够访问父作用域,父作用域无法访问子作用域
代码一:
// 作用域链
let a = 6;//全局作用域
function f() {
function d(){
console.log(a);
}
d();
}
f();
上述代码输入的是6 ,函数d()最后找到了全局作用域
代码二:
let a = 6;//全局作用域
function f() {
a = 7;//父级作用域
function d(){
console.log(a);
}
d();
}
f();
上述代码输入的是7,函数d()找到了父级作用域
代码三:
// 作用域链
let a = 6;//全局作用域
function f() {
a = 7;//父级作用域
function d(){
a = 8;//自己的作用域
console.log(a);
}
d();
}
f();
上述代码输出的是8,最后找到函数自身的变量,函数自身的作用域优先级最高