JavaScript 是一種使用引用傳遞或值傳遞的語言嗎?
P粉002546490
P粉002546490 2023-10-11 17:50:30
0
1
740

原始類型(數字、字串等)是按值傳遞的,但物件是未知的,因為它們都可以按值傳遞(在這種情況下,我們認為保存物件的變數實際上是一個對對象的引用)和按引用傳遞(當我們認為物件的變數保存物件本身時)。

雖然最後並不重要,但我想知道呈現參數傳遞約定的正確方法是什麼。 JavaScript 規範是否有摘錄,它定義了與此相關的語意?

P粉002546490
P粉002546490

全部回覆(1)
P粉195402292

JavaScript 很有趣。考慮這個例子:

function changeStuff(a, b, c)
{
  a = a * 10;
  b.item = "changed";
  c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);
console.log(obj2.item);

這會產生輸出:

10
changed
unchanged
  • 如果 obj1 完全不是引用,則更改 obj1.item 不會對函數外部的 obj1 產生任何影響。
  • 如果參數是正確的引用,那麼一切都會改變。 num 將是 100,而 obj2.item 將讀取「changed」。相反,num 保持 10obj2.item 保持「不變」。

相反,情況是傳入的項是按值傳遞的。但是按值傳遞的項本身就是一個引用。 從技術上講,這稱為共享呼叫

實際上,這表示如果您變更參數本身(如 numobj2),則不會影響輸入到範圍。但是,如果您更改參數的內部,它將向上傳播(與 obj1 一樣)。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板