上記のように g に新しい値を代入することができないので、外部変数に任意に値を代入できる fn 関数を書きたいです。
実際の要件は上記の通りですが、インスタンス化した変数を外部に代入したいです
質問者が理解していなかった概念は、関数のパラメータの受け渡し方法の問題です。
外部変数がパラメーターとして関数に渡される場合、2 つの状況を理解する必要があります。1 つは基本データ型で、もう 1 つはオブジェクトです。
パラメーターが基本データ型の場合、関数内のパラメーターは値によって渡されます。つまり、関数がパラメーター値を変更する方法は、実際のパラメーターのコピーを変更するだけです。スクリーンショットに示されているように、オントロジーには影響しません。
パラメータがオブジェクトの場合、実際には値の転送だと思いますが、渡されるのはオブジェクトの参照アドレス値であり、関数は参照オブジェクトのアドレスを実際のデータオブジェクトに内部的にインデックスし、その属性を変更します。これは外の世界に影響を及ぼす事態です。
一般的に言えば、外部変数に値を代入したい場合。変数をパラメータとして渡さず、関数本体で直接処理を行うこともできます。
関数変数の検索ルールに従って、まず現在の実行本体に変数が g を持つかどうかを検索します。外層に見つからない場合は、変数が定義または宣言されていないことを意味します。
JavaScriptの関数パラメータの受け渡しはすべて「値の受け渡し」です。
より合理的な書き方は次のとおりです
無理な書き方
後者が無理である3つ目の理由は、結合度が高すぎることです。
リーリー
これで必要なことは実行できますが、おそらく汎用的なものが必要ですよね?
var g;function fn(value){ g = value;}fn(1);g//1
質問者が理解していなかった概念は、関数のパラメータの受け渡し方法の問題です。
リーリー外部変数がパラメーターとして関数に渡される場合、2 つの状況を理解する必要があります。1 つは基本データ型で、もう 1 つはオブジェクトです。
パラメーターが基本データ型の場合、関数内のパラメーターは値によって渡されます。つまり、関数がパラメーター値を変更する方法は、実際のパラメーターのコピーを変更するだけです。スクリーンショットに示されているように、オントロジーには影響しません。
パラメータがオブジェクトの場合、実際には値の転送だと思いますが、渡されるのはオブジェクトの参照アドレス値であり、関数は参照オブジェクトのアドレスを実際のデータオブジェクトに内部的にインデックスし、その属性を変更します。これは外の世界に影響を及ぼす事態です。
一般的に言えば、外部変数に値を代入したい場合。変数をパラメータとして渡さず、関数本体で直接処理を行うこともできます。
リーリー関数変数の検索ルールに従って、まず現在の実行本体に変数が g を持つかどうかを検索します。外層に見つからない場合は、変数が定義または宣言されていないことを意味します。
JavaScriptの関数パラメータの受け渡しはすべて「値の受け渡し」です。
より合理的な書き方は次のとおりです
リーリー無理な書き方
リーリー後者が無理である3つ目の理由は、結合度が高すぎることです。
リーリー
これで必要なことは実行できますが、おそらく汎用的なものが必要ですよね?
リーリーリーリー
var g;
function fn(value){
g = value;
}
fn(1);
g//1