非厳密モードでは、JavaScriptの機能を強化するための変数があります。
1.原因
JavaScriptの作品は最初にコンパイルして、コンパイル時に実行され、インタプリタが全て譲渡または他のロジックの範囲とは、所定の位置に残る一番上に「移動」、これは可変リフトで宣言します。
例えば
FOO(); 関数FOO(){ にconsole.log(A)。//未定義 のvar A = 2 ; }
コンパイルはフォームであることが理解された後
関数FOO(){ VAR 。 console.log(A)。// 未定義 A = 2 ; } のfoo();
2.優先機能
昇格プロセスでは、関数の宣言は、最初に、その後、変数になります強化します。唯一の関数宣言が解除され、関数式(VARのA =関数b(){})を改善しないであろう((){}機能します)。同じ文が存在する場合は、同じ変数の宣言は無視されます。同じ関数宣言が、後者は以前に上書きされます。
例えば
FOO(); // 1 のvar fooという。 関数FOO(){ にconsole.log( 1 )。 } FOO = 関数(){ にconsole.log( 2 )。 }
理解されるべきで
関数FOO(){ にconsole.log( 1 )。 } のfoo(); // 1つの FOO = 関数(){ にconsole.log( 2 )。 }