bugfix> javascript > 投稿

ローカル変数を使用するスキルを構築しようとしています。変数をローカルにするには、使用する関数内で変数を宣言しますか?

しかし、この関数を非常に頻繁に使用している場合、この変数を何度も宣言しませんか?これでいいですか?

たとえば、次のような関数がある場合:

function myFunction() {
  var myVariable;
  // some code that requires myVariable
}

...毎回myVariableを宣言します。これにより、関数が呼び出されるたびにメモリ内のスペースがmyVariableのために確保されますか?これを回避する方法はありますか?

回答 4 件
  • はい、ローカル変数は、つまりこのスコープ外ではアクセスできません。

    これは問題ありません。実際、推奨される方法の1つです。

    はい、呼び出されるたびにメモリが使用されますが、関数の実行が完了すると、メモリはクリア/ガベージコレクションされます(他のリークがないと仮定)。

    ただし、もう1つ、 var を変更できます。   let へ  ブロックスコーピングをさらに改善するために...この非常に単純なケースでは必要ありませんが。

  • すべての関数呼び出しは、スタック上に別の要素を作成します。スタックの要素がポップされると、使用されなくなったすべてのローカル変数がガベージコレクションされます。したがって、必要に応じて変数をローカルで宣言することをお勧めします。実際にメモリを節約するためです。

  • たぶん、javascriptのベストプラクティスを簡単に確認する必要があります。多くのリンクの1つを次に示します。

    また、グローバル変数を使用しないでくださいと記載されています。このスコープで常に変数を宣言する必要があります。

    メモリの問題は発生しません。ガベージコレクターが処理します。しかし、ガベージコレクタがJavascriptでどのように機能するかを確認するために、ここで可能な多くの別のリンク

    詳細については、var別のリンクの代わりにletを使用することをお勧めします。letexplenation

  • 基本的に、関数スコープで宣言する場合、実行時間は長くなりません。

    ただし、関数内でスコープを宣言すると、メモリを節約できます。これは、関数の実行後、変数が不要になり、ガベージコレクターが次の実行時に変数を削除するためです(確率)。スコープが指定されていない場合、スクリプトの実行が終了するまで存在します。したがって、ランタイム全体にわたってメモリ内に変数がありますが、これはおそらく不要です。

    ブラウザを支援するには、ECMAScript 2016 let を使用できます  変数宣言のキーワード。明確なスコープを定義すると、ブラウザがコードをより最適化できるためです。

    また、 const を使用して   var の代わりのキーワード  メモリを少し節約できます。これにより、値が変更されないことを指定し、この事実によりメモリ消費が少なくなるためです。

あなたの答え