javascript閉包的定義及應用例項分析
官方解釋
“閉包”是一個擁有許多變數和綁定了這些變數的環境表示式(通常是一個函式),因而這些變數也是環境表示式的一部分。
通俗解釋
Javascript中所有的函式都是一個閉包。不過一般來說,巢狀的function產生的閉包更為強大,也是大部分時候我們所說的“閉包”。看如下程式碼:
複製程式碼 程式碼如下:
這段指令碼在執行完var c=a()之後,變數c實際上就指向了函式b,b中用到了變數i,再執行c()後就會彈出一個視窗顯示i的值。這段程式碼其實就是一個閉包,為什麼?因為函式a外的變數c引用了函式a內部的函式b。
Javascript的垃圾回收機制
由於javascript特殊的垃圾回收機制,才導致了閉包的產生。Javascript垃圾回收機制的.大體規則如下:
在javascript中,如果一個物件不再被引用,那麼這個物件就會被GC回收。如果兩個物件相互引用,而不再被第3者引用,那麼這兩個互相引用的物件也會被回收。而在上述的指令碼中,函式a被b引用,函式b又被函式a外的c所引用,這就是為什麼函式a執行後不被回收的原因。
閉包的應用場景
1. 保護函式內的變數安全。以上面的例子為例,函式a中變數i只有函式b才能訪問,而無法通過其他途徑訪問到,因此保護了i的安全性。
2. 在記憶體中維持一個變數。依然如上面的例子,由於閉包,函式a中的i一直存在於記憶體中,因此每次執行c(),i都會加1。
3. 通過保護變數的安全實現JS私有屬性和私有方法(不能被外部訪問)。如下,私有屬性和私有方法在Constructor外是無法訪問的:
複製程式碼 程式碼如下:
function Constructor(…){
var that = this;
var membername = value;
function membername(…){…}
}
-
關於HTML meat作用
meta標籤用於網頁的與中,meta標籤的用處很多。meta的屬性有兩種:name和http-equiv。name屬性主要用於描述網頁,對應於content(網頁內容),以便於搜尋引擎機器人查詢、分類(目前幾乎所有的搜尋引擎都使用網上機器人自動查詢meta值來給網頁分類)。這其中最重要的是descrip...
-
網頁設計的佈局
網頁設計的工作目標,是通過使用更合理的顏色、字型、圖片、樣式進行頁面設計美化,在功能限定的情況下,儘可能給予使用者完美的視覺體驗。以下是小編為您帶來的網頁設計的佈局,看看吧!網頁設計的佈局11、響應式網頁設計響應式網頁設計是網頁設計的一種技術,可在N多種瀏...
-
WAP的簡介
WAP協議被設計用來在無線客戶端(比如行動電話)上展示因特網內容。您應當具備的基礎知識在繼續學習之前,您需要對下面的知識有基本的瞭解:WWW,HTML以及有關網頁構建的基礎知識JavaScriptXML如果您希望首先學習這些專案,請在我們的首頁訪問這些教程。什麼是WAP?無線產...
-
關於javascript使用isNaN()函式判斷變數是否為數字
javascript中判斷變數是否為數字的方法,這裡主要介紹javascript裡的isNaN()函式。功能:isNaN()函式用於檢查其引數是否是非數字值。語法:isNaN(x)x必需。要檢測的值。返回值:如果x是特殊的`非數字值NaN(或者能被轉換為這樣的值),返回的值就是true。如果x是其他值,則返...