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