Werden Parameter in JavaScript als Wert oder als Referenz übergeben?
P粉394812277
P粉394812277 2023-08-21 15:57:16
0
1
583
<p>Primitive Typen (Zahlen, Zeichenfolgen usw.) werden als Wert übergeben, Objekte sind jedoch unbekannt, da sie beide als Wert übergeben werden können (in diesem Fall gehen wir davon aus, dass die Variable, die das Objekt enthält, tatsächlich die Objektreferenz ist). kann auch als Referenz übergeben werden (in diesem Fall gehen wir davon aus, dass die Variable das Objekt selbst enthält). </p> <p>Obwohl es letztendlich keine Rolle spielt, würde ich gerne wissen, wie die Parameterübergabekonvention korrekt wiedergegeben wird. Gibt es einen Auszug aus der JavaScript-Spezifikation, der die Semantik dazu definiert? </p>
P粉394812277
P粉394812277

Antworte allen(1)
P粉426906369

在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将为100obj2.item将为"changed"。相反,num保持为10obj2.item仍然为"unchanged"。

实际上,情况是传递的项是按值传递的。但是按值传递的项本身是一个引用。 从技术上讲,这被称为共享调用

在实际应用中,这意味着如果更改参数本身(如numobj2),那不会影响传入参数的项。但是,如果更改参数的内部,那将会传播回来(如obj1)。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage