ホイスト1.varと変数の宣言
文の現在のスコープの最上位で変数になるようヴァール変数は、関数やグローバルスコープのスコープ内で宣言しました
例:
関数のgetValue(条件){
IF(条件){
VaRの値が "青" =;
値を返します。
} そうしないと {
//ここでは、変数の値にアクセスするには、その値が定義されていません
ヌルを返します。
}
//ここでは、変数の値にアクセスするには、その値が定義されていません
}
上記は、と同等です。
関数のgetValue(条件){
値でした。
IF(条件){
値=「青」;
値を返します。
} そうしないと {
//ここでは、変数の値にアクセスするには、その値が定義されていません
ヌルを返します。
}
//ここでは、変数の値にアクセスするには、その値が定義されていません
}
2.ブロックレベルの宣言
1)及び現在のブロック(文字と{}との間の内部機能、B。ブロック(領域))の変数の範囲を制限することができ、変数の宣言は、改善されません、変数は、constと宣言させそして、スコープの定義の範囲外のアクセス変数はできません
例:
関数のgetValue(条件){
IF(条件){
//これは、ステートメントはエラーになります一時的なデッドゾーン(時間デッド・ゾーン)、使用にconsole.log(typeof演算値)です。JavaScriptエンジンが変数宣言スキャンコードで見つかった、または(varステートメントを経験する)の範囲の一番上にそれらを高める、のいずれかのステートメントでTDZを入れて(と遭遇したのconst文を聞かせて)いるので。TDZアクセス変数は、実行時エラーがトリガされます。唯一の変数宣言文が実行され、変数はTDZから削除した後、前の通常アクセスされます。
値が「青」=ましょう。
値を返します。
} そうしないと {
//変数の値は、ここでは存在しません。
ヌルを返します。
}
//変数の値は、ここでは存在しません。
}
2)禁止の再宣言:同じスコープを聞かせたりconstが重複して定義、既存の識別子はできません
例:どこのカウント= 30;
//構文エラーを投げます
聞かせてカウント数= 40;
3)constは声明
設定され、その値を変更することはできません一度のconst宣言は、一定です。そのため、それぞれのconstで宣言された定数で初期化する必要があります
例:CONST maxItems = 30。
constの名前; //構文エラー:初期化されていない定数
constの声明や宣言は非常に異なるもの、です聞かせてそれ以外の場合はエラーがスローされます、再び定数のconst定義代入ありません。
constのバインディング宣言を変更することができますが、あなたが値を変更することができません。すなわち、オブジェクトは、constの宣言されたオブジェクトの属性値を変更することができます。
3.ブロックスコープ結合ループ
] [=のfuncsました。
以下のために(聞かせて私は= 0; I <10; I ++){// 注:constのここで宣言した場合、エラーがスローされます。ループの最初の反復において、iは0であるので、反復が正常に実行されました。この文の試みは、定数を変更し、したがって、エラーをスローするため、そして私++、行います。
funcs.push(関数は、(){ 変数は次のサイクルを変更していないのであれば、それは、動作中、またはFOR-のループCONSTを使用しては同じせCONST、すなわち、宣言することができます。
console.log(I);
});
}
funcs.forEach(ファンクション(FUNC){
FUNC(); 9まで//出力0、次に1、2、; VAR定義された可変出力10 10もし
}
前記グローバルブロックの範囲は、結合
VARは、グローバルスコープのために使用される場合、それはvarとグローバルプロパティを使用して、手段が誤って既存を上書きすることができるプロパティのグローバルオブジェクト(ウィンドウオブジェクトブラウザ環境)として新たなグローバル変数を作成します;
そして、のconstをさせたり、使用、新しいバインディング、グローバルスコープの下に作成されますが、それはLETまたはconstのグローバル変数をオーバーライドすることはできませんし、他の言葉で、グローバルオブジェクトの結合特性に追加しますが、それだけをマスキングしていません;
= 1があります。
B = 2ましょう。
console.log(A)。// 1
console.log(window.a)。// 1
console.log(B)。// 2
console.log(window.b)。// undefind
概要:現在のベストプラクティスのブロック・レベルのバインディングを使用することです:のみを使用し、実際に変数の値を変更する必要があり、デフォルトの使用のconstをしましょう。いくつかのエラーを防止するように、これは、ある程度不変コードに達成することができます。