[英]Pass by reference vs Copy of reference
我已經理解了pass by reference
的概念。
然而, copy of reference
的概念copy of reference
讓我有點困惑。
這兩個通過引用傳遞與引用副本之間有什么區別嗎?
var user={
name:"xxx"
}
function update(ref) {
ref = {
dep:"yyy"
};
}
update(user);
使用上述代碼時,為什么不重新初始化user
對象?
當我按如下方式更新現有屬性時:
ref.name='modified'
它更新user
對象。
另外,如果我問,重構的代碼是否傳遞了引用的副本?
如果變量ref
是對某個對象obj
的引用,則ref
的值就是obj
的內存地址。 制作ref
的副本,我們稱之為ref2
,只會創建另一個具有相同內存地址的變量。 因此,傳遞引用或引用的副本是一回事。
不一樣的是按值傳遞和按引用傳遞。 這兩者之間的區別在網上有詳細記錄。
它與是否通過引用傳遞變量無關。
事實上,問題是你在ref
放置了另一個對象,它不再指向存儲在user
變量中的同一個對象。
function update(ref) {
//In this line we are reinitializing the value of ref with another object
ref = {
dep: "yyy"
};
ref.name = 'modified';
}
演示:
讓我們看看這個片段的不同之處:
var user = { name: "xxx" } function update(ref) { //Here we are updating ref/user ref.before = "a value"; //And in this line we are reinitializing the value of ref with another object ref = { dep: "yyy" }; ref.name = 'modified'; console.log('This is ref value: '); console.log(ref); } update(user); console.log('This is user value: '); console.log(user);
JS 函數中的參數:
關於參數如何傳遞給函數(按引用或按值)的問題,原語和對象之間存在差異,您可以閱讀MDN 函數文檔,其中說:
原始參數(例如數字)按值傳遞給函數; 值被傳遞給函數,但如果函數改變了參數的值,這種改變不會在全局或調用函數中反映出來。
如果您傳遞一個對象(即非原始值,例如 Array 或用戶定義的對象)作為參數,並且函數更改了對象的屬性,則該更改在函數外部可見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.