ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript はプリミティブ型とオブジェクトを使用した値渡しと参照渡しをどのように処理しますか?

JavaScript はプリミティブ型とオブジェクトを使用した値渡しと参照渡しをどのように処理しますか?

Patricia Arquette
リリース: 2024-12-18 12:54:11
オリジナル
955 人が閲覧しました

How Does JavaScript Handle Pass-by-Value and Pass-by-Reference with Primitive Types and Objects?

JavaScript 値渡しと参照渡し

JavaScript では、すべての変数が値によって渡されます。つまり、元の値のコピーが返されます。が作成され、関数に渡されます。ただし、値が配列やオブジェクト リテラルなどのオブジェクトである場合、コピーは元のオブジェクトへの参照になります。

関数の引数への影響

  • プリミティブ: プリミティブ (数値、文字列など) が関数に渡されるとき、関数内でその値に加えられた変更は、関数のローカル スコープに限定され、関数外の元の変数には影響しません。
  • オブジェクト参照: オブジェクト参照が渡されるとき関数に変更を加えると、関数内でオブジェクトのプロパティに加えられた変更は、関数の外であっても元のオブジェクトに反映されます。

への影響関数外の変数

  • 参照渡し: オブジェクト参照は参照によって渡されます。つまり、関数内でオブジェクトのプロパティに加えられた変更は、元のオブジェクトのプロパティに影響します。ただし、関数内で参照自体に加えられた変更 (再割り当てなど) は、元のプロパティには影響しません。 variable.
  • 値渡し: 値によって渡されるプリミティブ値とオブジェクト参照は、関数の外の元の変数には影響しません。

function f(a, b, c) {
  a = 3; // Reassignment changes the local variable only.
  b.push("foo"); // Property change affects the original object.
  c.first = false; // Property change affects the original object.
}

const x = 4;
let y = ["eeny", "miny", "mo"];
let z = { first: true };
f(x, y, z);

console.log(x, y, z.first); // Output: 4, ["eeny", "miny", "mo", "foo"], false
ログイン後にコピー

上記の例では、 b オブジェクトと c オブジェクトへの変更は次のとおりです。元のオブジェクトに反映されますが、 a の再割り当ては効果がありません。

詳細な例:

function f() {
  const a = ["1", "2", { foo: "bar" }];
  const b = a[1]; // Copy the reference to the original array element
  a[1] = "4"; // Change the value in the original array
  console.log(b); // Output: "2" (Original value of the copied reference)
}
ログイン後にコピー

最初の例では、 a が変更されても、 b は参照のコピーであるため、元の値を保持しています。

function f() {
  const a = [{ yellow: "blue" }, { red: "cyan" }, { green: "magenta" }];
  const b = a[1]; // Copy the reference to the original object
  a[1].red = "tan"; // Change the property in the original object
  console.log(b.red); // Output: "tan" (Property change is reflected in both variables)
  b.red = "black"; // Change the property through the reference
  console.log(a[1].red); // Output: "black" (Property change is reflected in both variables)
}
ログイン後にコピー

2 番目の例では、変更が行われています。 a[1].red への変更は、同じオブジェクト参照を共有するため、a と b の両方に影響します。

独立したコピーの作成

オブジェクトの完全に独立したコピーを作成するにはでは、JSON.parse() メソッドと JSON.stringify() メソッドを使用して、それぞれオブジェクトを逆シリアル化およびシリアル化できます。例:

const originalObject = { foo: "bar" };
const independentCopy = JSON.parse(JSON.stringify(originalObject));
ログイン後にコピー

以上がJavaScript はプリミティブ型とオブジェクトを使用した値渡しと参照渡しをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート