對JS閉包的一點淺顯的認識

jopen 11年前發布 | 13K 次閱讀 JavaScript開發 JavaScript

閉包的主要作用就是實現在函數外部進行對函數內部的變量的調用。

我們都知道,JS同大部分編程語言類似,在函數內部聲明的變量,其作用域一般情況下僅在其自身,函數外部是不能正常訪問到其內部變量的。

 如:function test(){

   var a=2;

}

alert(a);  //這段代碼無法執行。

若要想訪問到此變量a,則需要通過定義閉包的形式。閉包的使用主要是有2種方法,一種是在函數(或對象)內部聲明一個子函數,賦值給一個全局變量,在外部調用此全局變量從而達到調用這個子函數:

function test1(){

var a1=2;

getmessage = function(){      

a1+=1;

alert(a1);

}

}

getmessage();  //輸出結果為3

或者: function test2(){

var a2=2;

 function getmessage1(){

a2+=1;

alert(a2);

}

return getmessage1;

}

var get =test2();

get(); //輸出結果為3;

閉包必須通過函數調用的形式建立一個變量獲取通道,如果只傳遞變量,則無法起到閉包的效果,如:

function test3(){

var a3=2;

 getmes =function(){

  a3+=1;

}

return a3;

}

getmes();//a3自加

alert(test3());//輸出結果為2;因為函數返回值是一個變量,而非函數;

如果這樣寫,則可以獲取到a3的值:

function test3(){

var a3=2;

 getmes =function(){

  a3+=1;

}

function returnvalue(){

return a3;

}

return returnvalue;

}

getmes();//a3自加

var getvalue=test3();

alert(getvalue());//輸出結果為3。因為返回的是函數形式。盡管和上一個函數都是返回a3的值,但其返回的方式不同(閉包形式和變量形式),所得到的結果也不同,這就是閉包。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!