閉包的原理小結

2021-09-08 20:38:01 字數 684 閱讀 1291

在理解閉包原理之前,首先要來回顧一下作用域的相關知識點。

閉包的作用實際上就是儲存自己私有的變數,通過提供的介面(方法)給外部使用,但外部不能直接訪問該變數。

使用案例來詳細說明:

// 宣告乙個全域性作用域

var num1 =1;

functiona1(

)// 返回 a2 這個函式,實際就是 num2 + num3 的和

return a2;

}// 使用變數接收 a1的返回值 a2函式,實際num2 + num3 的和

var num4 =a1(

);// 控制台輸出 num4的呼叫,實際是 num2 + num3 的和

console.

log(

num4()

);

上面的案例中,首先宣告了乙個全域性變數 num1,緊接著宣告函式a1,a1中宣告區域性變數 num2,然後又宣告乙個內部函式a2,同時a2中也宣告了乙個區域性變數num3。

現在一共有3個作用域, 全域性作用域,a1作用域,a2作用域。a2函式要使用num2首先在自己內部查詢,如果沒找到就去父函式a1的作用域中查詢,假如父函式a1沒有就到全域性作用域中查詢,直到找到為止,這樣就形成了作用域鏈。

注意:如果函式內部的變數在宣告時沒有使用 var ,這個變數就會提公升為全域性變數。

Rust閉包小結

rust會根據閉包體進行環境變數的捕獲,閉包捕獲環境中變數的模式優先順序順序為 不可變借用,可變借用,所有權。fn main println s 這個閉包的閉包體和上面僅有一處不同,那就是加了move,這會強行拿走s的所有權,即影響了捕獲方式。即使 閉包體看起來是用最普通的不可變引用來操作的環境中的...

JS 閉包的實現原理

函式都有自己的執行環境,該環境定義了變數或者函式訪問資料的許可權,當離開執行環境後,該環境內的變數會被銷毀。function add console.log a referenceerror a is not defined 上例a在 add 函式的作用域內,能夠訪問,離開作用域後,就無法訪問了。那...

Js中的閉包原理

要了解清楚js中的閉包制機,那麼得先了解全域性執行環境 塊級執行環境 函式執行環境 變數物件 環境棧 作用域鏈 摧毀執行環境。全域性執行環境 全域性執行環境指的是最外層的執行環境。在web中全域性執行環境被認為 window 物件,所以你在全域性環境中建立的變數與函式都是物件的屬性和方法。函式執行環...