本文實例分析了Javascript閉包的概念及用法。分享給大家供大家參考。具體如下:
提到閉包,想必大家都早有耳聞,下面說下我的簡單理解。
說實話平時工作中實際手動寫閉包的場景並不多,但是專案中用到的第三方框架和組件或多或少用到了閉包。
所以,了解閉包是非常必要的。呵呵...
一、什麼是閉包
簡而言之,就是能夠讀取其他函數內部變數的函數。
由於JS變數作用域的特性,外部無法存取內部變量,內部可以外部變數。
二、使用場景
1. 實作私有成員。
2. 保護命名空間,避免污染全域變數。
3. 緩存變數。
先看一個封裝的例子:
return {
getName: function () {
return name;
},
setName: function (newName) {
name = newName;
}
}
}();
console.log(person.name); // 直接訪問,結果為:undefined
console.log(person.getName()); // 結果為:default
console.log(person.setName("langjt"));
console.log(person.getName()); // 結果為:langjt
再看循環常用閉包解決引用外部變數問題:
三、注意事項
1. 記憶體洩漏
由於閉包會讓函數中的變數都保存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題。
如:
2. 變數命名
如果內部函數的變數和外部函數的變數名稱相同時,那麼內部函數再也無法指向外部函數那個同名的變數。
如:
実際、上記の使用法は、専門用語では関数カリー化と呼ばれており、複数のパラメーターを受け取る関数を、単一のパラメーター (元の関数の最初のパラメーター) を受け取り、残りのパラメーターを返す関数に変換します。 . パラメータを受け取り、結果を返す新しい関数テクノロジ。基本的に、次のようなクロージャのキャッシュ機能も利用します。
var inc = adder(1);
var dec = adder(-1);
//inc、dec は 2 つの新しい関数になり、その関数は渡されたパラメーター値を変換することです (/‐)1
alert(inc(99));//100
alert(dec(101));//100
alert(adder(100)(2));//102
alert(adder(2)(100));//102
もう 1 つの例は、Ali Yubo の seaJS ソース コードです:
var isObject = isType("オブジェクト");
var isString = isType("String");
この記事が皆様の JavaScript プログラミング設計に役立つことを願っています。