Var対Javascriptを残す
cos |
JavaScript |
sep |
sin
Michael Zippo
ECMAScript6(ES6)のリリースにより、JavaScript言語に新機能が追加されました。これらの特性の1つは、変数の宣言方法に影響を与えます。 let
とconst
が追加されたことで、各変数宣言をいつ使用するかについて、さまざまな質問がありました。
これには記事では、JavaScript環境での定義と使用に関して、各オプションについて説明します。
Pre-ES6:Var
ES6のリリース前、変数はvar
の宣言でした。
変数は、エラーなしで再宣言および更新することもできます
varの最初の問題は明らかです。変数にすでに同じ名前が付けられている場合、再宣言によってコードにバグが発生する可能性があります。何かが再度宣言され、変数名がコードベースですでに使用されていることに気づかなかった場合、意図しない結果が生じる可能性があります。これに加えて、スコープとリフティングに関して他の特殊性も発生します。
スコープ
スコープは何を教えてくれます変数を使用できます。グローバルまたはローカルスコープの変数があります。同じ変数宣言があり、グローバルでもう一方がローカルの場合はどうなりますか?
varが関数の外部で宣言されると、グローバルにグローバルに利用できるようになります。 "hello" em>が関数で宣言されている場合、関数でのみ使用できます-関数スコープまたはローカルスコープを使用します
同じ変数宣言があり、スコープが異なる場合、 helloWorld()を呼び出しても、関数内のvarはグローバルvarの割り当てを変更しません。 varは「hello」という名前の関数で宣言されているため、代替定義のグローバル範囲内にあるようには見えません。
ホイスト
JavaScriptで変数をホイストすると、関数と変数の宣言は、コードを実行する前にスコープの先頭に移動されます。変数は宣言されていますが初期化されていないため、変数の初期値は未定義です。
ここでは、「こんにちは」があなたの手の届くところに持ち上げられて宣言されています。したがって、基本的にコンピュータは次のようにコードを解釈します。
JavaScriptエンジンは、helloが存在することを認識しますが、次のステップまでhelloがどのように定義されているかを認識しません。
最終的に、ECMAScript標準の作成を支援した開発者varには、時間とお金がかかる可能性のある小さな問題があることに気づきました。そこで彼らは、より厳格なキーワードを作成することにしました。これにより、ES6に「休暇」と「コスト」が作成されました。
ES6:。 Let
let
em>キーワードは、多くの点でvarキーワードと非常によく似ています。主な違いは、エラーが返される方法と各キーワードのスコープが定義されていることです。
let
キーワードで宣言および初期化された変数は再割り当てできますが、再宣言することはできません
上記のコードをJavaScriptコンソールで実行すると、最後の行にエラーが返されます:
SyntaxError:識別子 ` hello`はすでに宣言されています
var
とは異なり、 let
を使用して変数を宣言すると同じ宣言はできません。変数名。ただし、上記の例に示すように、必要に応じて再割り当てできます。
スコープ
チャンピオンに関しては、 let
は var
。グローバルスコープまたはローカルスコープが提供するルールに加えて、 let
には追加の制約があります。コードブロックで宣言された変数は、そのコードブロックでのみ使用できます。これは、関数がその関数内に個別のブロックを持つことでさらに実行できるコードのブロックであるため、関数スコープに似ています。
このコードにはエラーがないため、 helloの2つのインスタンスは、スコープが異なるため、別々の変数として扱われます。
ホイスト
ホイストは、let宣言とvar宣言が類似しているもう1つの領域です。 「Var」を上げると、未定義として初期化されます。ただし、「leave」を初期化する前に使用しようとすると、参照エラーが発生します。
構文の観点からは、letキーワードが最良の選択であることに注意してください。これは、初期化プロセスの前に変数を再宣言または使用しようとするとエラーが生成されるためです。
ES6:Const
const
キーワードには let
キーワードよりも厳しいガイドライン。 const
を使用すると、変数を宣言したり、再割り当てしたりすることはできません。 const
に再割り当てしようとするとTypeErrorが生成されます。
とはいえ、オブジェクトまたは配列を操作する場合、オブジェクトまたは配列のプロパティが更新される可能性があります。オブジェクトまたはテーブルの基本構造が変更されない限り、いつでも更新できます。
例に示すように、タスクを新しいプロパティセットに再割り当てすると、 TypeError:定数変数への割り当て
エラーが発生します。オブジェクトの一意のプロパティを更新する場合を除いて、Constを再割り当てまたは再宣言することはできません