閉包: 乙個函式能夠讀取另外乙個函式裡面的變數。
閉包的作用: <1>讀取函式內部的變數;<2>讓這個變數的值始終保持在記憶體中,不會在父函式呼叫後被自動清除。
使用閉包注意事項:由於閉包會使得函式中的變數都被儲存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在ie中可能導致記憶體洩漏,解決辦法是在退出函式之前,將不使用的區域性變數全部刪除。
解決閉包記憶體洩漏的辦法:
原始**:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
function
cars()
cars.prototype.saycolor =
function
();
};
var
instance =
new
cars();
console.log(instance.saycolor()())
優化後的**:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function
cars()
cars.prototype.saycolor =
function
();
outcolor =
null
;
//釋放記憶體
};
var
instance =
new
cars();
console.log(instance.saycolor()())
稍微複雜一點的例子:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function
inheritprototype(subtype,supertype)
function
cars()
cars.prototype.saycolor =
function
();
};
function
car()
inheritprototype(car,cars);
car.prototype.saynumber =
function
()
};
};
var
instance =
new
car();
console.log(instance.saynumber()()());
首先,該例子組合使用了建構函式模式和原型模式建立cars 物件,並用了寄生組合式繼承模式來建立car 物件並從cars 物件獲得屬性和方法的繼承;
其次,建立乙個名為instance 的car 物件的例項;instance 例項包含了saycolor 和saynumber 兩種方法;
最後,兩種方法中,前者使用了乙個閉包,後者使用了兩個閉包,並對其this 進行修改使其能夠訪問到this.color 和this.number。
這裡存在記憶體洩露問題,優化後的**如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function
inheritprototype(subtype,supertype)
function
cars()
cars.prototype.saycolor =
function
();
this
=
null
;
//這裡
};
function
car()
inheritprototype(car,cars);
car.prototype.saynumber =
function
()
};
this
=
null
;
//這裡
};
var
instance =
new
car();
console.log(instance.saynumber()()());
以上就是為大家分享的解決方法,希望對大家的學習有所幫助。
javaScript中的閉包
首先,我覺得,乙個概念,如果不理解也不影響使用的話,那麼,就沒必要去理解它 去學習它。閉包就是這樣乙個概念,你不理解它也能很好的用它。俺這兩年寫as3程式,是天天在和它打交道,甚至有過乙個function套乙個,乙個方法中套了20多個function的極端例子,但從未深究過它是怎麼實現的,它就像水和...
javascript中的閉包
1.閉包的解釋 關於閉包具體的定義文獻中給的概念很抽象,我認為閉包是一種使函式能夠都去其它函式的區域性變數的語法機制。舉個例子 functionoutfunc returninfunc infunc 控制台顯示 vicfeel 這這個例子我們可以看出,在函式infunc中依然可以訪問outfunc的...
javascript閉包中的this指向問題
關於this物件,它是基於當前執行環境所繫結的 var name the window var object console.log object.getname the window 每個函式在被呼叫時都會自動取得兩個特殊變數 this和arguments。內部函式在搜尋這兩個變數時,只會搜尋到其...