對JS閉包的一點淺顯的認識
閉包的主要作用就是實現在函數外部進行對函數內部的變量的調用。
我們都知道,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的值,但其返回的方式不同(閉包形式和變量形式),所得到的結果也不同,這就是閉包。