javascript - 関数内で関数外の変数に値を代入するにはどうすればよいですか?
淡淡烟草味
淡淡烟草味 2017-05-19 10:39:36
0
5
2683


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

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

淡淡烟草味
淡淡烟草味

全員に返信(5)
PHPzhong

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

リーリー

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

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

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

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

リーリー

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

いいねを押す +0
習慣沉默

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

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

リーリー

無理な書き方

リーリー

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

いいねを押す +0
大家讲道理

リーリー

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

リーリー
いいねを押す +0
左手右手慢动作

リーリー

いいねを押す +0
我想大声告诉你

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート