[英]Passing values to global variables
有人有一個合理的解釋,為什么javascript無法將對象文字作為值傳遞給通過函數參數傳遞的全局變量?
我會忽略一些基本規則嗎?
(function(global) {
var id = "3543a1354";
global = {
name: 'global',
getId: function() {
return id;
}
};
})(this.global = this.global || {})
因此,執行代碼后,參數'global'的值實質上是一個空對象。 非常奇怪:例如在最后一行設置斷點並在控制台中執行對象文字分配,則該值將正確傳遞給'global'。
順便說一句,這將按預期工作:
(function(global) {
var id = "3543a1354";
global.name = "global";
global.getId = function() {
return id;
}
}(this.global = this.global || {}))
在這兩個函數中, global
是局部變量,因為它是一個函數參數。
在第一種情況下,您將使用文字表示法創建一個新對象,並將其分配給局部變量。 這對函數調用中使用的變量沒有影響。
在第二種情況下,您正在修改局部變量引用的對象的屬性。 該對象與函數調用中使用的變量所引用的對象相同,因此調用者可以看到該對象。
您將this.global
傳遞給函數,並且在函數global
是引用global global
的參數。
當你說,
global = {...}
您現在正在更改global
引用。 由於已更改引用,因此全局global
變量將保持不變,而局部global
變量將引用新分配的對象。
在第二種情況下
global.name = "global";
global.getId = function () {..}
您正在更改局部global
對象,它實際上是指global global
。 因此,您正在間接更改global global
。 這就是為什么這會改變global global
,而第一個沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.