検索

ホームページ  >  に質問  >  本文

javascript - 関数内で関数外の変数に値を代入するにはどうすればよいですか?


上記のように g に新しい値を代入することができないので、外部変数に任意に値を代入できる fn 関数を書きたいです。

実際の要件は上記の通りですが、インスタンス化した変数を外部に代入したいです

淡淡烟草味淡淡烟草味2776日前2679

全員に返信(5)返信します

  • PHPz

    PHPz2017-05-19 10:41:36

    質問者が理解していなかった概念は、関数のパラメータの受け渡し方法の問題です。

    リーリー

    外部変数がパラメーターとして関数に渡される場合、2 つの状況を理解する必要があります。1 つは基本データ型で、もう 1 つはオブジェクトです。

    パラメーターが基本データ型の場合、関数内のパラメーターは値によって渡されます。つまり、関数がパラメーター値を変更する方法は、実際のパラメーターのコピーを変更するだけです。スクリーンショットに示されているように、オントロジーには影響しません。

    パラメータがオブジェクトの場合、実際には値の転送だと思いますが、渡されるのはオブジェクトの参照アドレス値であり、関数は参照オブジェクトのアドレスを実際のデータオブジェクトに内部的にインデックスし、その属性を変更します。これは外の世界に影響を及ぼす事態です。

    一般的に言えば、外部変数に値を代入したい場合。変数をパラメータとして渡さず、関数本体で直接処理を行うこともできます。

    リーリー

    関数変数の検索ルールに従って、まず現在の実行本体に変数​​が g を持つかどうかを検索します。外層に見つからない場合は、変数が定義または宣言されていないことを意味します。

    返事
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:41:36

    JavaScriptの関数パラメータの受け渡しはすべて「値の受け渡し」です。

    より合理的な書き方は次のとおりです

    リーリー

    無理な書き方

    リーリー

    後者が無理である3つ目の理由は、結合度が高すぎることです。

    返事
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:41:36

    リーリー

    これで必要なことは実行できますが、おそらく汎用的なものが必要ですよね?

    リーリー

    返事
    0
  • ringa_lee

    ringa_lee2017-05-19 10:41:36

    リーリー

    返事
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:41:36

    var g;
    function fn(value){
    g = value;
    }
    fn(1);
    g//1

    返事
    0
  • キャンセル返事