Reference 重新認識 JavaScript: Day 19 閉包 Closure

closure閉包1

範圍鏈 scope chain
切分變數有效範圍的最小單位是 function
內層函式可讀取外層函式中宣告的變數,反之,外層函式無法讀取內層函式宣告的變數。
scope chain 是在函式被定義的當下決定的,不是在被呼叫的時候決定的。(跟 this 相反)

閉包 closure
函式的組合,函式作用域的環境
範圍鏈是在定義函式的當下建立,一個函式(outer)可return其內部函式(inner),讓全域的範圍可藉由範圍鏈,取得內部函式(inner)的變數值。

情境1 : 變數宣告在全域中,藉由函式修改變數。但當code變多,全域變數太多會易有bug,像是命名衝突、變數無法回收caused memory leak(?)
=> 使用 閉包寫法

closure閉包2

情境2 : 有2個變數皆使用同一個函式,2個變數獨立儲存各自的值。
=> 使用 閉包寫法。用2個變數承接
closure閉包3
howManyCups變數 等於 匿名函式
howManyCups2變數 等於 匿名函式
console.log(呼叫匿名函式) // ++0
console.log(呼叫匿名函式) // ++1
howManyCups變數、howManyCups2變數 獨立不互相影響。

注意 外部函式呼叫2次 和 變數承接呼叫(外部函式回傳的)內部函式 的差異

closure閉包4


#閉包 #closure #函式名稱()() #變數名稱() #Scope Chain #範圍鏈 #變數接的回傳值是函式,變數就可被呼叫







Related Posts

[Note] Git: 基本觀念

[Note] Git: 基本觀念

[論文筆記] Seeing Out of tHe bOx - End-to-End Pre-training for Vision-Language Representation Learning

[論文筆記] Seeing Out of tHe bOx - End-to-End Pre-training for Vision-Language Representation Learning

用 DDS 開發 ROS 2.0

用 DDS 開發 ROS 2.0


Comments