ES6は二つの重要なキーワードが追加しましょうとconstの誰もが今日共有するために、不注意(間違った場所を記入してください)、3下のノートの前に差異の概要を引き出します。
、聞かせて
我々は、すべてのコマンドのみがLETに位置してみましょう宣言コード変数のブロック内(フォーカスリング)効果的な、関数とグローバルな作業は、Javascriptをブロックレベルのスコープではないことだけドメインを知っているが、のは、このような状況が生まれた壊れてみましょう。
1.letが有効なブロックであり、varがグローバル(コード)効果的です
もし(真){ ましょう =「我」。 VaRの B = '你' ; } にconsole.log( A + "う")。 // 报错:キャッチされないにReferenceError:定義されていない はconsole.log( "VAR" + B)。
質問です:私たちは、サイクル0-9この10桁をプリントアウトしたい場合、早期に、私たちはしばしば、このような間違い(エラー例)を行います。
用(VAR ; Iは、10 <I ++はI = 0 {) のsetTimeout(関数(){ にconsole.log(I); }) }
// 出力10 10
サイクルの終了後に、この時間は私が持っているので、変数var iはiが、グローバル変数I I価値のタイマので、各サイクルは同じプリントである、ようにだけグローバル変数、グローバル規模で効果的な宣言しました10。この問題は(正しい例)を解決するには:
ため(VAR I = 0; iが10 <; iは++ ){ (関数(I){ たsetTimeout(関数(){ にconsole.log(I); }) })(I) }
機能の雹は、あなたが作成するたびに独自の値を格納するためのスペースがあるだろうので、私たちは、閉鎖機能によって実装されています。それは私たちが望む結果を得るためになる。そのため、私たちはさまざまな作成するために閉鎖関数に渡されるたびにループのi値を、実行しますので、メモリ内の関数をiは値の各閉鎖は、それは同じではありませんレッツブロックレベルのスコープは、私たちもすることによって達成することができます。
用(J = 0せ; J <10; J ++ ){ たsetTimeout(関数(){ にconsole.logは(J); }) } // 输出0123456789を
可変リフト2.letは変数varを強化するために存在し、存在しません。
console.log(A)。 // にReferenceError:Aが定義されていない = "我"をしましょう。 console.log(B)。 // 未定義 するvar B = "你"。
varステートメントと変数の存在スクリプトの実行が開始したとき、bがすでに存在しますが、値を持たないを強化、それが出力未定義ます
3.let文を繰り返すことはできません、varが変数を複数回宣言することができます
=ましょう。 てみましょう = bは、 VaRの B = C; VaRの B = D; // 識別子「」既に宣言されている B // D
二、constのコマンド
constの読み取り専用変数を宣言宣言が明らかES6のために、初期化されなければならないと、文はそこにコードブロックがあるかのconstを許可すれば、これらの変数を閉じを形成するために、ブロックの先頭からのコマンド文をブロックする、ことを、変更することはできませんスコープ。その前のコードブロックは、変数宣言を与えられます。
VaRのA = "A" ; もし(真){ コンソール。ログインする(A )。//にReferenceError:定義されていないのconst PI = "3.1415926" 。}