iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0

大家好,我是一名菜鳥工程師,Chris,今天來到第 23 天,JS 的 Closure 閉包

什麼是閉包 (Closure)?

函式和該函式被宣告時所在的作用域環境 (lexical environment) 的組合。它是程式語言的一種特性,也被廣泛應用在 JavaScript 中

比較白話的說法,就是內部函式能夠取得函式外部的變數,並且記住這個變數。而由於能夠記住這個外部變數,閉包很常被用來做狀態保存

閉包的特性

1 封裝變數:閉包可以將變數封裝在函式內部
2 訪問外部變數:閉包可以訪問和使用其所在作用域中的外部變數
3 將函式當做值來傳遞:由於閉包將函式和環境綁定在一起,因此可以將閉包當做值來傳遞和使用

閉包的應用

1 函式作為返回值:在一個函式中定義一個內部函式,並在最後返回這個內部函式

function hi() {
  // 外部函式
  let n = 1;
	
  function test() {
   // 內部函式
    n += 1;
    console.log(n);
  }
  return test;
}

const test = hi();

test(); // 2
test(); // 3
test(); // 4
  • 上方程式碼的 test 函式,能拿到外部函式 hin 變數,並保存在記憶體中
  • 當我們呼叫 test 時,會回傳 2、3、4,是因為之前的 n 狀態被記住了

2 將函式作為參數:將一個函式當做參數傳遞給另一個函式

function outer() {
  let test = "Hello";
  return function inner(callback) {
    callback();
  }
}

let newFunction = outer();
newFunction(function() {
  console.log("回呼函數被調用");
});

閉包優點

1 私有變數和保護變數:通過閉包,可以實現封裝和隱藏變數

2 減少全域變數的污染:使用閉包可以將變數限定在函式的作用域內

3 實現某些功能:例如模組化程式碼、緩存、迭代器等

閉包缺點

1 可能導致內存洩漏:由於閉包可以引用外部環境中的變數,因此如果不妥當的使用,可能會導致內存洩漏問題

2 可能會影響效能:閉包會增加函式的複雜度和運行時間,因此高效率運行下,閉包可能會影響程式碼的效能

★總結 : 以上就是關於閉包的說明

今天就介紹到這邊,那我們明天見囉~~

明天預計內容:JS 的遞迴!!!


上一篇
DAY 22 - this 是什麼
下一篇
DAY - 24 遞迴和費波那契數列
系列文
前端開發 | 學習歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言