簡體   English   中英

Javascript:通過引用的對象自變量,了解賦值差異

[英]Javascript: Object arguments by reference, understanding assignment discrepancy

我試圖將對象用作函數參數(傳遞為引用而不是值),並發現有些東西對我來說似乎很奇怪,我想知道為什么這樣做會如此。

好吧,假設我有兩個名為onload的JavaScript程序,各版本之間的改動很小...

第一個程序的修改函數將這樣分配參數: data.fruit = "Mango";

//This program *will* update the data.fruit in the scope of main() with "Mango".
function modify(data) {
    data.fruit = "Mango"; 
    alert(data.fruit+"\nmodify();");
}

function main(){
    var data= {"fruit":"Apple"};
    modify(data);

    alert(data.fruit+"\nmain();");
}

main();

第二個程序的修改函數將這樣分配參數對象的值: data = {"fruit" : "Mango"};

//This program *ignores* updating the object in the scope of main.
function modify(data) {
    data = {"fruit" : "Mango"};
    alert(data.fruit+"\nmodify();");
}

function main(){
    var data= {"fruit":"Apple"};
    modify(data);

    alert(data.fruit+"\nmain();");
}

main();

也許我誤解了按引用傳遞,但是如果我分配對象的值,在我看來,給對象分配新對象的值應保持引用。 有人可以向我解釋這種行為嗎? 為什么在分配這種方式時參考丟失?

之前已經問過這個問題(請參閱我的評論),但是在這種意義上,“引用”與C ++引用不同,后者不能重新分配。

為變量分配新值將重新引用該變量,而不是更改先前引用的對象。

另一方面, 變量執行操作確實會影響引用的對象。 只有賦值運算符(及其變體+=等)才能重新賦值變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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