iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
Software Development

Node.js隨手札記 想到什麼就說什麼的系列 第 22

第二十二天 閉包是什麼好像很好吃

  • 分享至 

  • xImage
  •  

在node的世界裡面,閉包用的非常的大量。

但他真的沒那麼好閱讀,可卻又很好用

這邊來跟大家基本介紹一下什麼是閉包

  1. 在function裡面call function。
  2. 裡面可以取得外部變數。
  3. 正確使用閉包,保持變數的乾淨

這應該是我自己理解起來覺得比較好理解的方式了

上圖

這就是一個基本的閉包了

大家都說,閉包優點是不會影響到外部的變數,但這個還是有一些需要注意的地方

let count = 0;

function countDogs() {
  count += 1;
  console.log(count + ' dog(s)');
}

// 中間是其他程式碼...

 count = 0;

function countCats() {
  count += 1;
  console.log(count + ' cat(s)');
}

countCats(); // 1 cat(s)
countCats(); // 2 cat(s)
countCats(); // 3 cat(s)

countDogs(); // 4 dog(s),我希望是 1 dog(s)
countDogs(); // 5 dog(s),我希望是 2 dog(s)

countCats(); // 6 cat(s),我希望是 4 cat(s)

此段程式碼引用
[JS] 深入淺出 JavaScript 閉包(closure)

原因就是我們不小心把全域變數拿去function裡面使用了

我們不應該拿最外部的變數在function裡面作用
可以採用這種做法

或者採用參考文章內的做法

function dogHouse() {
  var count = 0;
  function countDogs() {
    count += 1;
    console.log(count + ' dogs');
  }
  return countDogs;
}

function catHouse() {
  var count = 0;
  function countCats() {
    count += 1;
    console.log(count + ' cats');
  }
  return countCats;
}

const countDogs = dogHouse();
const countCats = catHouse();

countDogs(); // "1 dogs"
countDogs(); // "2 dogs"
countDogs(); // "3 dogs"

countCats(); // "1 cats"
countCats(); // "2 cats"

countDogs(); // "4 dogs"

此段程式碼參考
[JS] 深入淺出 JavaScript 閉包(closure)

只要想辦法把變數控制他的作用域內,那就沒問題了。

而我們透過可以引用外部變數的方式,就可以達到一些計算效果

希望這些簡單的例子可以幫助你理解初步的閉包運算

參考資料
[JS] 深入淺出 JavaScript 閉包(closure)

卡斯伯的 Blog


上一篇
第二十一天 ...到底在.什麼的展開運算符
下一篇
第二十三天 Node如何安裝.env
系列文
Node.js隨手札記 想到什麼就說什麼的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言