可変リフト
変数varので、それ以外の場合はエラーになり、letの定義の変数の後に文で使用してください、強化、アップグレードおよび変数が存在しないようにする存在します。
ました
// VAR定義された変数は可変リフトは、変数宣言は、最前の全体的な範囲を高めるであろう存在 // 例1 にconsole.log(A); // 未定義 するvar C = 10 ; // に相当 するvar C、 コンソール.logの(A); // 未定義 C = 10 ; / * ------------------------ * / // 例2 のvar A = 100 。 FUNC関数(){ にconsole.log(A); // 未定義 するvar A = 10 ; にconsole.log(A); // 10 } FUNC(); // 関数を呼び出します // 同等 のvar = A 100 、 関数FUNC(){ VARのA; にconsole.log(A); // 未定義 A = 10 ; にconsole.log(A); // 10 } FUNC(); // 呼び出し関数 // 注意: // グローバル変数に相当宣言と直接割り当てずに変数のために、それが割り当て与えられる前に、割り当て後に使用することが可能 にconsole.log(A); // エラー:Aが定義されていない = 100 。 console.log(A); // 100
てみましょう
// 変数宣言が存在しない定義されたLETの変数は、エラーが変数宣言の前に使用される // 例1 にconsole.log(A); // エラーが定義されていない のlet A = 100 ; // 例2 関数func(){ console.log(A); LETのA = 100 ; } FUNC(); // 関数を呼び出します
第二に、スコープ
VAR:のみ関数スコープとグローバルスコープの概念は、ブロックレベルのスコープの概念はありません。
てみましょう:のみ{}を含めて最大によると、{}内の文のIF文のためのブロックレベルのスコープの概念はブロックレベルのスコープを属します。
ました
// グローバルスコープの例 // 関数定義の内部変数に追加され、他はグローバル変数です。 用(VAR I = 0 ;私は< 100 ; Iは++ ){ ; } にconsole.log(I); // 100 // 例の機能の範囲は、以下の出力B 10、 "Aが定義されていない"とは、所与のながら、なぜ? // 変数(b)は、グローバル変数と同等の割り当てを、宣言し、直接的ではないのでします。 // 関数中の変数については(a)の代入文は、関数はエラーを回避するために、外部アクセス不可能、内部でのみ有効であり、 関数funcを(){ B = 10 ; VAR A = 100 ; } FUNC(); // 関数は、呼び出し はconsole.log(B)を; // 10 にconsole.log(A)。 // 报错aが定義されていません。
/ * の知識塗りつぶし 機能の構文:定義された関数から呼び出して関数を呼び出す (関数(){ })(); * / // として試験 (関数(){ VARの A = B = 100 ; } )(); はconsole.log(B); はconsole.log(A); // 問題:それぞれAとBの、何の出力も? // 回答:B出力100を、「定義されていない」与えながら // なぜ? // まず、関数は馴染みの表現に分解される (関数(){ VAR A = 100 、 B = 100 ; })(); にconsole.log(B); // 100 にconsole.log(A)。//定義されたエラーではありません; // その結果、それは見ることができ、右?グローバル変数に対応するB、および内側のみではなく、外部からのアクセスに基づいて行動するための機能:これは、前述の「スコープ機能」です。
てみましょう
限りコマンドせてブロックレベルの余地があるように、変数が宣言され、それだろう外部の影響を受けなくなった「バインド」この分野で(結合)。コードブロックでは、変数を宣言する前に、letコマンドを使用して、変数がこれは文法的に「一時的な死」として知られ、使用できません。
// 例1 // 前のコードブロックは、変数を宣言せて使用する場合、変数が利用できないので、それ以外の場合はエラー、「Aが定義されていない」与えられる 場合(trueに){ A = 123 ; せてA ; } // 例2 // のみ有効ループ本体のための私を聞かせて使用して定義されるように、 "私は定義されていません"与えられている ため(iは=せ1。 ; I < 100 ; iは++ ){ ; } にconsole.logを(I )
第三に、繰り返し声明
VAR:変数が複数回宣言することができます
てみましょう:変数は、ステートメントを繰り返すことは許されない、同じスコープ内で許可されないようにしましょう、文は同じ変数を繰り返しました。関数内で再宣言と同じパラメータにはできません
ました
VaRの A = 10 ; 関数func(){ にconsole.log(A); // 未定義 するvar A = 11 ; にconsole.log(A); // 11 } FUNC(); にconsole.log(A); // 10 VaRのA; にconsole.log(A); // 10 VAR A = 12であり; はconsole.logは(A); // 12である // この事実は、変数var変数宣言および反復リフトに関連している // 実際上記でき相当 するvar A; A = 10 ; 関数func(){ VAR A。 console.log(A); //は不定 =を11。; にconsole.log(A); // 11 } FUNC(); にconsole.log(A); // 10 にconsole.log(A); // 10 A = 12 ; にconsole.log(A); // 12 // このように、我々は正しい答えに到達することは容易であると信じています
てみましょう
// 例1 // 「識別子『』既に宣言されている」与えられる するvar A = 1 ; せ = 2 ; // 例2 // 異なるスコープを宣言することができるので、与えられていません。 = LET ' ハロー' ; { LET Aが = ' ハイ' ; にconsole.log(A); // ハイ } にconsole.log(A); // ハロー // 例3は、 // 「識別子与えられる''を有しますすでに定義されている変数varのアップグレードとして発生します、「宣言されて。 = LET ' こんにちは' ; { VAR A = 「ハイ」; にconsole.log(A); } にconsole.log(A); // 例4 // 「識別子『A』は既に宣言された」与えられる // 同じ内部関数宣言が重複しませんデフォルトのパラメータ変数が宣言されるパラメータは、それが再びせ又は使用のconst宣言することができない 関数func(a)は{ せ = 「こんにちは」; にconsole.log(A); } FUNC(「ハイ」);
https://blog.csdn.net/qq_41638795/article/details/81318704転載