在node的世界裡面,閉包用的非常的大量。
但他真的沒那麼好閱讀,可卻又很好用
這邊來跟大家基本介紹一下什麼是閉包
這應該是我自己理解起來覺得比較好理解的方式了
上圖
這就是一個基本的閉包了
大家都說,閉包優點是不會影響到外部的變數,但這個還是有一些需要注意的地方
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)