ホームページ >ウェブフロントエンド >jsチュートリアル >プリミティブ、関数、および WTH 値が更新されない

プリミティブ、関数、および WTH 値が更新されない

王林
王林オリジナル
2024-08-14 12:33:39904ブラウズ

Primitives, Functions, and WTH The Value won

私は基礎に少し取り組んでいて、この問題に遭遇しました。それは直感的にはわかっていましたが、詳しく調べたことはありませんでした。そして、JavaScript がプリミティブをどのように扱うかについて私が深く理解していないという言い訳はありません。

これは最も単純な例です。ここで、add3 関数とremove1 関数を呼び出しても、myPointsvariable は更新されません。

let myPoints = 3;

function add3(points) {
 points += 3;
}

function remove1(points) {
  points--;
}

add3(myPoints);
remove1(myPoints);

console.log(myPoints) // 3

これをこのように機能させるための中心的な概念は次のとおりです:

  1. 値渡し:
    JavaScript では、プリミティブ値 (数値など) を関数に渡すとき、それらは値によって渡されます。これは、元の変数自体ではなく、値のコピーが作成されて関数に渡されることを意味します。

  2. 関数スコープ:
    関数内で定義された変数には関数スコープがあり、その関数内でのみアクセス可能です。

  3. 戻り値:
    結果を関数の外で使用したい場合、JavaScript の関数は明示的に値を返す必要があります。

myPoints が変更されない理由は次のとおりです:

  1. add3(myPoints) を呼び出すと、myPoints (3) の値のコピーが関数に渡されます。
  2. 関数内では、points は 6 に増加するローカル変数です。
  3. ただし、この変更はローカル ポイント変数にのみ影響し、元の myPoints には影響しません。
  4. 関数は新しい値を返さないため、結果はどこにも保存されません。
  5. 元の myPoints は変更されません。

これを修正するには、主に 2 つのオプションがあります:

  1. 新しい値を返し、再割り当てします。
function add3(points) { 
    return points + 3;
}

myPoints = add3(myPoints);
  1. 変数を参照によって渡します (オブジェクトを使用):
let myPoints = { value: 3 };

function add3(pointsObj) { 
    pointsObj.value += 3;
}

add3(myPoints);
console.log(myPoints.value); // Now it's 6

以上がプリミティブ、関数、および WTH 値が更新されないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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