今、私たちは3つのキーワードVAR、聞かせて、CONST、特性および使用方法を理解しましょう。
ました
JavaScriptは、我々は通常、スコープは関数スコープ、変数varステートメントであると言うに関係なく、コード内で宣言された場合の、この動作は、可変リフト(巻き上げ)と呼ばれ、ほとんどの現在のスコープのトップに昇格されます
変数が関数内で宣言されている場合、変数にグローバルに宣言しながら、それは、それがグローバルスコープのトップに昇格します、関数の先頭に昇格されますされています。
機能テスト(){ にconsole.log( '1'、A)// 未定義の 場合(偽){ VARの A = 1 } はconsole.log( '3'、A)// 未定義 } テスト()
実際の実装は、関数内の上記のコードの変数は、if文の条件が偽の場合でも、声明のトップに上げられます、同じことが可変リフトに影響を与えません。
試験関数(){ VARのA //ステートメントが割り当てられていないれていない ( '1'、A)にconsole.logを//未定義の (偽の)IF { 。A = 1 } //ない代入文 はconsole.log( '3' 、A)//未定義 }
シーン機能ネストされた関数では、変数は、ごく最近の関数の先頭に上昇したが、外部関数にアップグレードされません。
// Bは関数Aのトップに上げますが、機能テストは改善されません。 試験関数(){ 関数A(){ IF(偽の){ VARのB = 2 } } はconsole.log( 'B'、B) } テスト()// Bが定義されていません
文がない場合、それは、この点は別の領域でなければならない、何の代入文や声明後も同じではないではありません、エラー私たちはバグを見つけましょう
//がない場合の宣言 aが定義されていません。
てみましょう
constが宣言され、ブロックレベルの範囲をさせ、および使用特性変数がリフトされていないせ、VARに類似しているが、現在のブロックにロックされることができます。
非常に簡単な例:
テスト機能(){ IF(真の){ 一般的に一時的なデッドゾーンとして知られているTDZのはconsole.log(A)は、//、現象を記述するために使用される変数を強化しない のlet Aを=。1 } } テスト()// Aが定義されていない 機能のテスト(){ IF(真の){ LETのA = 1 } にconsole.log(A) } テスト()// Aが定義されていません
最初の文を、次に訪問:使用する唯一の正しい方法。
機能テスト(){ IF(TRUE){ せ= 1 にconsole.log(A) } } テスト()// 1