JS函式閉包
阿新 • • 發佈:2022-03-15
閉包指的是那些引用了另一個函式作用域中變數的函式,通常是在巢狀函式中實現的。
函式執行時,每個執行上下文中都會有一個包含其中變數的物件。全域性上下文中的叫變數物件,它會在程式碼執行期間始終存在。而函式區域性上下文中的叫活動物件,只在函式執行期間存在。在定義函式時,就會為它建立作用域鏈,預裝載全域性變數物件,並儲存在內部的[[Scope]]中。在呼叫這個函式時,會建立相應的執行上下文,然後通過複製函式的[[Scope]]來建立其作用域鏈。接著會建立函式的活動物件(用作變數物件)並將其推入作用域鏈的前端。這意味著函式執行上下文的作用域鏈中有兩個變數物件:區域性變數物件和全域性變數物件。作用域鏈其實是一個包含指標的列表,每個指標分別指向一個變數物件,但物理上並不會包含相應的物件。
function compare(value1, value2) { if (value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; } } let result = compare(5, 10);