ローカル変数を使用するスキルを構築しようとしています。変数をローカルにするには、使用する関数内で変数を宣言しますか?
しかし、この関数を非常に頻繁に使用している場合、この変数を何度も宣言しませんか?これでいいですか?
たとえば、次のような関数がある場合:
function myFunction() {
var myVariable;
// some code that requires myVariable
}
...毎回myVariableを宣言します。これにより、関数が呼び出されるたびにメモリ内のスペースがmyVariableのために確保されますか?これを回避する方法はありますか?
すべての関数呼び出しは、スタック上に別の要素を作成します。スタックの要素がポップされると、使用されなくなったすべてのローカル変数がガベージコレクションされます。したがって、必要に応じて変数をローカルで宣言することをお勧めします。実際にメモリを節約するためです。
たぶん、javascriptのベストプラクティスを簡単に確認する必要があります。多くのリンクの1つを次に示します。
また、グローバル変数を使用しないでくださいと記載されています。このスコープで常に変数を宣言する必要があります。
メモリの問題は発生しません。ガベージコレクターが処理します。しかし、ガベージコレクタがJavascriptでどのように機能するかを確認するために、ここで可能な多くの別のリンク
詳細については、var別のリンクの代わりにletを使用することをお勧めします。letexplenation
基本的に、関数スコープで宣言する場合、実行時間は長くなりません。
ただし、関数内でスコープを宣言すると、メモリを節約できます。これは、関数の実行後、変数が不要になり、ガベージコレクターが次の実行時に変数を削除するためです(確率)。スコープが指定されていない場合、スクリプトの実行が終了するまで存在します。したがって、ランタイム全体にわたってメモリ内に変数がありますが、これはおそらく不要です。
ブラウザを支援するには、ECMAScript 2016
let
を使用できます 変数宣言のキーワード。明確なスコープを定義すると、ブラウザがコードをより最適化できるためです。また、
const
を使用してvar
の代わりのキーワード メモリを少し節約できます。これにより、値が変更されないことを指定し、この事実によりメモリ消費が少なくなるためです。
関連記事
- 印刷されたものの値を返さず、forループなしで、印刷する関数を繰り返し呼び出すにはどうすればよいですか?
- 時間T = 18および国n = 48のパネルデータセットでX_(i、t)変数を意味することにより、新しい変数、たとえばY_(i、t)を作成する関数が必要です。
- 仮想関数をオーバーライドせずに仮想関数を使用する目的
- タイムスタンプ(タイムゾーンの有無にかかわらず)の最大関数はありますか?
- Luaのスクリプトで定義されている関数を使用せずに関数を実行する方法
- Visual Studio2019でBOOLパラメーターを期待する関数にパラメーターとしてbool変数を渡す
- プロパティを検証せずに共用体変数のタイプをテストする
- 割り当て前に参照されるローカル変数x:Django
- この関数(C ++)でループの外側にカウント変数を定義できないのはなぜですか
- グローバル変数を$$eval関数に渡す方法はありますか?
はい、ローカル変数は、つまりこのスコープ外ではアクセスできません。
これは問題ありません。実際、推奨される方法の1つです。
はい、呼び出されるたびにメモリが使用されますが、関数の実行が完了すると、メモリはクリア/ガベージコレクションされます(他のリークがないと仮定)。
ただし、もう1つ、
var
を変更できます。let
へ ブロックスコーピングをさらに改善するために...この非常に単純なケースでは必要ありませんが。