這帶來的好處是內部函數可以存取定義它們的外部函數的參數和變數。
首先,我們來建構一個簡單的物件。
var testObj = {
var testObj = {
var testObj = {
add: function(inc){
this.value = (typeof inc === "number") ?inc : 1;
}
}
}testObj.add();
testObj.value; // 11
複製程式碼
程式碼如下:
var testObj = (function(>
var test value = 10;
return {
add: function(inc){ },
getValue: function (){
return value;
}
};
})();
};
})();
testObj.add();
testObj.getValue(); // 11
複製程式碼
程式碼如下:
var MyObj = function( 是str .status = str;
};
MyObj.prototype.getStatus = function(){
return this.status;
複製程式碼
程式碼如下:
var obj = function(status){
var obj = function(status){
getStatus: function(){ 以 return status;
var myObj = obj("javascript");myObj.getStatus(); // "javascript"這裡當我們呼叫obj的時候,它會傳回包含getStatus方法的一個新物件,該物件的一個參考保存在myObj中,即使obj已經回傳了,但getStatus方法仍然享有存取obj物件的status屬性的特權。 getStatus方法並不是存取該參數的副本,它所存取的就是該參數本身。這是可能的,因為該函數可以存取它被創建時所處的上下文環境,這稱為閉包。