ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の値渡しメカニズムは関数内のプリミティブ変数とオブジェクト変数にどのような影響を与えますか?

JavaScript の値渡しメカニズムは関数内のプリミティブ変数とオブジェクト変数にどのような影響を与えますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 04:34:17226ブラウズ

How Does JavaScript's Pass-by-Value Mechanism Affect Primitive and Object Variables in Functions?

JavaScript の参照渡しと値渡しを理解する

JavaScript では、関数に渡されるパラメーターは常に値によって渡されます。これは、元の値のコピーが作成され、元の値はコピーに加えられた変更の影響を受けないことを意味します。ただし、値がオブジェクト (配列を含む) の場合、作成されるコピーは元のオブジェクトへの参照になります。

この概念は、変数が関数内で変更されるときの動作に影響します。

  • プリミティブ値 (数値、文字列など): プリミティブ値が引数として渡され、関数内で変更されると、関数外の元の値は変更されません。
  • オブジェクト (配列、オブジェクトなど): オブジェクトが引数として渡され、関数内で変更されると、関数外の元のオブジェクトも変更されません。変更されます。これは、関数が元のオブジェクトのコピーを受け取ったとしても、それは実際にはメモリ内の同じ基になるオブジェクトへの参照であるためです。したがって、関数内で参照されるオブジェクトのプロパティを変更すると、関数の外にある元のオブジェクトに影響します。

例:

function f(a, b, c) {
    a = 3; // Re-assigns a to a new primitive value
    b.push("foo"); // Adds a new property to b, modifying the referenced object
    c.first = false; // Modifies a property of the referenced object
}

この例では、x、y、関数の外側の z は次の値になります。x は 4 (プリミティブ値) のままで、y には追加プロパティ ["foo"] (オブジェクト プロパティが追加されました) が追加されます。

オブジェクトの完全に独立したコピーを作成するには、そのすべてのプロパティを新しいオブジェクトに明示的にコピーする必要があります。これは、Object.assign() メソッドを使用するか、オブジェクトを走査し、古いプロパティに基づいた新しいプロパティを持つ新しいオブジェクトを作成することによって実行できます。

以上がJavaScript の値渡しメカニズムは関数内のプリミティブ変数とオブジェクト変数にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。