2016-04-25 89 views
0

嗨,當我有以下的javascript代碼JavaScript函數範圍傳遞對象作爲參數

var skyrimCity = function(object) { 
    object = { 
     'world': 'whiterun' 
    }; 
    }, 
    skyrim = function(object) { 
    object.world = 'skyrim'; 
    }, 

    elderScrolls = { 
    'world': 'tamriel' 
    }; 
console.log(elderScrolls); // printed value ? -> {world: "tamriel"} 

skyrimCity(elderScrolls); 
console.log(elderScrolls); // printed value ? -> {world: "tamriel"} 

skyrim(elderScrolls); 
console.log(elderScrolls); // printed value ? -> {world: "skyrim"} 

裏面天際功能我改變了世界的價值,但我可以看到它的功能外還有。我想知道爲什麼這個變化的範圍在函數之外傳播?在JavaScript函數中傳遞一個對象總是作爲對原始對象本身的引用傳遞?

+2

數組,函數和對象都是通過引用在JS中引用,總是。 –

+2

*「在JavaScript函數中傳遞一個對象總是作爲對原始對象本身的引用傳遞嗎?」*是的,它和其他流行語言(Java,PHP,Python)的工作方式基本相同。 –

+0

是迂腐,對象在JS中通過「byValue」,它只是該值是對象的引用... – dandavis

回答

3

在JavaScript函數中傳遞一個對象總是作爲引用傳遞給原始對象本身?

是的,非常多。在JavaScript中,任何不是基本類型(數字,布爾,字符串)的參考都是參考類型。如果您將一個對象傳遞給一個函數,那麼您將傳遞一個對原始對象的引用。如果該對象在函數內被修改,則原始對象被修改。

換句話說,這與變量範圍無關,而與變量實際引用的內容無關。