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,最后找到函数自身的变量,函数自身的作用域优先级最高

posted @ 2024-09-27 10:57  洛飞  阅读(2)  评论(0编辑  收藏  举报