Ist JavaScript eine Sprache, die Pass-by-Reference oder Pass-by-Value verwendet?
P粉002546490
P粉002546490 2023-10-11 17:50:30
0
1
569

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 gehen wir davon aus, dass die Variable, die das Objekt enthält, tatsächlich eine Referenz auf das Objekt ist) und als Referenz übergeben (wenn wir uns die Variablen eines Objekts so vorstellen, als ob sie das Objekt selbst enthalten).

Obwohl es am Ende keine Rolle spielt, würde ich gerne wissen, wie man die Parameterübergabekonvention richtig darstellt. Gibt es einen Auszug aus der JavaScript-Spezifikation, der die diesbezügliche Semantik definiert?

P粉002546490
P粉002546490

Antworte allen (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一样)。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!