簡體   English   中英

JavaScript中奇怪的函數行為

[英]Strange function behavior in JavaScript

我在我的項目中正在執行以下類型的代碼,其結果使我感到困惑。

function changeSomethingsValue (thingToChange) {
    thingToChange = "something else";
}

var something = "something";

changeSomethingsValue(something);

console.log(something); // prints out "something"

我對為什么something變量的值在通過changeSomethingsValue函數傳遞后仍然是字符串“ something”感到changeSomethingsValue 為什么會發生這種情況,我如何獲得將新值分配給傳入的變量的函數?

參數是通過值而不是通過引用傳遞的。 對於字符串,該參數是對該字符串的引用的副本。 通過在函數內部分配新引用來更改副本不會更改原始副本。

如果傳入對象或數組,則可以更改其中的項目,而無需更改對該對象或數組的引用:

function changeSomethingsValue(thingToChange) {
  thingToChange[0] = "something else";
}

var something = [ "something" ];

changeSomethingsValue(something);

console.log(something[0]); // prints out "something else"

當一個函數應將一個值作為輸入而將更改后的值作為輸出時,常見的模式是返回該值:

function changeSomethingsValue(thingToChange) {
  return thingToChange + " else";
}

var something = "something";

something = changeSomethingsValue(something);

console.log(something); // prints out "something else"

傳遞基元(例如字符串或數字)時,它會按值傳遞。 您期望它通過引用傳遞。

解決方法是將something設置為changeSomethingsValue的返回值

function changeSomethingsValue (thingToChange) {
    thingToChange = "something else";

    return thingToChange;
}

var something = "something";

something = changeSomethingsValue(something);

console.log(something); // prints out "something"

暫無
暫無

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

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