JavaScript 變數的作用域鏈

洛飞發表於2024-09-27

作用域鏈本質上就是使用的是哪個變數,全域性變數,區域性變數,自身的變數。這個在看別人程式碼的邏輯的時候非常有用,底層是變數的查詢機制。

  • 巢狀關係的作用域竄連起來形成了作用域鏈
  • 在函式被執行,會優先查詢當前函式作用域中的變數。
  • 如果當前函式作用域找不到,則會逐級查詢父級作用域,知道全域性作用域
  • 相同作用域鏈中按著從小到大的規則查詢變數
  • 子作用域能夠訪問父作用域,父作用域無法訪問子作用域

程式碼一:

//   作用域鏈
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,最後找到函式自身的變數,函式自身的作用域優先順序最高

相關文章