問題?什麼是js(javaScript)的閉包原理,有什麼作用?
一、定義
官方解釋:閉包是一個擁有許多變數和綁定了這些變數的環境的表達式(通常是一個函數),因而這些變數也是該表達式的一部分。
很顯然,丫的。 。 。 。 。啥啊!砸門農村人看不懂! ! !
所以小編的理解是這樣的:****定義在函數中的函數,並且可在外部存取得到。 (正常情況下我們是無法存取局部函數 的)這就有點類似脫了褲子放屁的意思,多此一舉,可是並非多此一舉。閉包肯定有 它的作用的。
作用:1、可以減少全域變數的對象,防止全域變數過去龐大,導致難以維護
2、防止可修改變量,因為內部的變數外部是無法存取的,也不可修改的。安全性
3、讀取函數內部的變量,另一個就是讓這些變數的值始終保持在記憶體中。
二、範例:(js程式碼)
#1.Javascript語言的特殊之處,就在於函數內部可以直接讀取全域變數。
var n=999; function f1(){ alert(n); } f1(); // 999
2.另一方面,在函數外部自然無法讀取函數內的局部變數。
function f1(){ var n=999; } alert(n); // error
這裡有一個地方要注意,函數內部宣告變數的時候,一定要使用var指令。如果不用的話,你實際上聲明了一個全域變數!
function f1(){ n=999; } f1(); alert(n); // 999
#**** *如何從外部讀取局部變數?
我們有時候需要得到函數內的局部變數。但是,前面已經說過了,正常情況下,這是辦不到的,只有透過變通方法才能實現。
function f1(){ n=999; function f2(){ alert(n); // 999 } }
#三、使用閉套件的注意點
1)由於閉包會使得函數中的變數都保存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在IE中可能導致記憶體外洩。解決方法是,在退出函數之前,將不使用的局部變數全部刪除。
2)閉包會在父函數外部,改變父函數內部變數的值。所以,如果你把父函數當作物件(object)使用,把閉包當作它的公用方法(Public Method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便
改變父函數內部變數的值。
以上就是js的閉包原理理解的內容,更多相關內容請關注PHP中文網(www.php.cn )!