ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で関数に渡されるとき、プリミティブ値と参照値はどのように異なりますか?

JavaScript で関数に渡されるとき、プリミティブ値と参照値はどのように異なりますか?

Susan Sarandon
リリース: 2024-11-16 10:21:02
オリジナル
475 人が閲覧しました

How do primitive values and reference values differ in JavaScript when passed to a function?

JavaScript のプリミティブ値と参照値

JavaScript では、変数にプリミティブ値または参照値を割り当てることができます。ブール値、数値、文字列などのプリミティブ値は、変数のメモリ位置に直接保存されます。

配列やオブジェクトなどの参照値を作成する場合、実際にはオブジェクトや配列を保存するわけではありません。それ自体を変数に入れます。代わりに、オブジェクトまたは配列が保存されているメモリ内の場所への参照を保存します。これは、オブジェクトまたは配列を変更すると、変数自体が変更されていなくても、その変更が変数に反映されることを意味します。

以下JavaScript コードは、プリミティブ値と参照値を作成します。

var name = "John"; // Primitive value stored in the variable
var shoppingCart = []; // Reference value stored in the variable
ログイン後にコピー

この例では、変数名にプリミティブ値「John」が含まれています。変数 shoppingCart には、メモリに保存されている配列オブジェクトへの参照が含まれています。

値による値の受け渡しと参照による値の受け渡し

関数にプリミティブ値を渡す場合、値のコピーが渡されます。これは、関数内で値を変更しても、変数に格納されている値には影響しないことを意味します。

関数に参照値を渡すと、コピーではなく参照自体が渡されます。これは、関数内でオブジェクトまたは配列に加えられた変更は、変数に格納されているオブジェクトまたは配列にも影響することを意味します。

次の JavaScript コードは、次のことを示します。値を値渡しおよび参照渡し:

// Pass by value
var name = "John";

function changeName(name) {
  name = "Jane";  // Changes the local copy of the value
}

changeName(name);

console.log(name); // Outputs "John" because the original value is not changed

// Pass by reference
var shoppingCart = [];

function addProduct(shoppingCart) {
  shoppingCart.push("Apple");  // Changes the object stored in the reference
}

addProduct(shoppingCart);

console.log(shoppingCart); // Outputs ["Apple"] because the original object is updated
ログイン後にコピー

最初の例では、関数changeNameにプリミティブ値「John」が渡されます。関数が値を「Jane」に変更しても、変数名に格納されている元の値は影響を受けません。

2 番目の例では、関数 addProduct に参照値 shoppingCart が渡されます。関数が製品「Apple」を配列に追加すると、変数 shoppingCart に格納されている元のオブジェクトも更新されます。

以上がJavaScript で関数に渡されるとき、プリミティブ値と参照値はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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