2015-10-14 19 views

答えて

9

可変ホイスト。実際のコードはこのように実行されます。

var x = 1; 
(function() { 
    var x; // x = undefined 
    console.log(x); 
    x = 2; 
})(); 

編集:Mr Listerのアドバイスでは、可変ホイストに少し気をつけてください。 MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var):

"変数宣言は、コードが実行される前に処理されます。varで宣言された変数のスコープは、現在の実行コンテキストです。これは、囲み関数または変数です世界のどの機能の外にも宣言されています。

+2

OPにどのような可変ホイストがあり、なぜそれがなぜvar x = 1であるのか説明できますか? (){console.log(x);} 'は動作しますか? –

+0

私は彼らが他の場所でそれを見ることができると知っていますが、ここの回答が自己完結していればいいと思います。 –

+0

@ TBWill4321私がそれをするとき、このコードは未定義です! –

3

コンパイラのために、コードの下にvarを開始しても、コンパイラはvar x;のようにトップに送ります。したがって、console.logを実行する前にまず未定義の "x"として開始します。関数の最初のものを使うつもりなので、これらの間違いは起こりません。

関連する問題