Ist JavaScript eine Pass-by-Reference- oder Pass-by-Value-Sprache?
P粉450744515
2023-08-23 18:58:12
<p>Primitive Typen (Zahlen, Zeichenfolgen usw.) werden als Wert übergeben, Objekte sind jedoch unbekannt, da sie alle als Wert übergeben werden können (in diesem Fall ist die Variable, von der wir glauben, dass sie das Objekt enthält, tatsächlich eine Referenz auf ein Objekt). und Pass-by-Reference (wenn wir uns die Variablen eines Objekts so vorstellen, als ob sie das Objekt selbst enthalten). </p>
<p>Obwohl es am Ende keine Rolle spielt, würde ich gerne wissen, wie man eine Parameterübergabekonvention richtig darstellt. Gibt es einen Auszug aus der JavaScript-Spezifikation, der die diesbezügliche Semantik definiert? </p>
JavaScript 很有趣。考虑这个例子:
这会产生输出:
obj1
根本不是引用,则更改obj1.item
不会对函数外部的obj1
产生任何影响。num
将是100
,而obj2.item
将读取“changed”
。相反,num
保持10
且obj2.item
保持“不变
”。相反,情况是传入的项是按值传递的。但是按值传递的项本身就是一个引用。 从技术上讲,这称为共享呼叫。
实际上,这意味着如果您更改参数本身(如
num
和obj2
),则不会影响输入到范围。但是,如果您更改参数的内部,它将向上传播(与obj1
一样)。