簡體   English   中英

將值傳遞給全局變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM