JavaScript 是一種按引用傳遞還是按值傳遞的語言?
P粉450744515
P粉450744515 2023-08-23 18:58:12
0
1
544
<p>原始類型(數字、字串等)是按值傳遞的,但物件是未知的,因為它們都可以是按值傳遞的(在這種情況下,我們認為保存物件的變數實際上是一個對物件的引用)和按引用傳遞(當我們認為物件的變數保存物件本身時)。 </p> <p>雖然最後並不重要,但我想知道呈現參數傳遞約定的正確方法是什麼。 JavaScript 規範是否有摘錄,它定義了與此相關的語意? </p>
P粉450744515
P粉450744515

全部回覆(1)
P粉231112437

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 一樣)。

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