js中閉包(積累總結)
阿新 • • 發佈:2017-11-18
結果 ons 網頁 不能 創建 ner alert 子函數 存在
什麽是閉包:
當內部函數 在定義它的作用域 的外部 被引用時,就創建了該內部函數的閉包 ,如果內部函數引用了位於外部函數的變量,當外部函數調用完畢後,這些變量在內存不會被 釋放,因為閉包需要它們.
例子1
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
return innerFun; //註意這裏
}
var obj=outerFun();
obj(); //結果為1
obj(); //結果為2
var obj2=outerFun();
obj2(); //結果為1
obj2(); //結果為2
例子2
function Foo() {
var i = 0;
return function() {
console.log(i++);
}
}
var f1 = Foo(),
f2 = Foo();
f1();
f1();
f2();
// 0 1 0
由於在Javascript語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成"定義在一個函數內部的函數"。
閉包的最大用處有兩個,一個是可以讀取函數內部的變量,另一個就是讓這些變量始終保持在內存中,即閉包可以使得它誕生環境一直存在。請看下面的例子,閉包使得內部變量記住上一次調用時的運算結果。
所以內存消耗很大。因此不能濫用閉包,否則會造成網頁的性能問題。
js中閉包(積累總結)