2016-03-27 7 views
4

変数のホイストがJavaスクリプトで行われていることを理解しています。それは未定義出力なぜ私が取得することができませんJavaScriptのホイスト変数

do_something() 
    { 
    var foo = 2;  
    console.log(foo); 
    } do_something() // it prints 2 

do_something() 
    {   
    console.log(foo); var foo = 2; 
    } do_something() // it prints undefined 

JavaScriptを

答えて

1

宣言だけが持ち上げられます。割り当てられた変数は持ち上げられません。だからあなたは

4

これはインタプリタが見ていないか、なぜ第二の機能はまた私のunderstand.buyごとに2を印刷する必要があります巻き上げそうであるように、あなたのコード

do_something() { 
var foo; 
console.log(foo); // undefined 
foo = 2; 
} 

do_something(); 

ですので、undefinedを印刷しています。これは可変ホイストの基本です。あなたの宣言は一番上に移動し、あなたの割り当ては同じ場所にとどまります。 varを超えてletを使用すると、ケースが異なります。

2

Javascriptのみホイスト宣言で、初期化ではありません。

var x = y, y = 'A'; 
console.log(x + y); // undefinedA 

ここで、xとyはコードが実行される前に宣言され、後で割り当てが行われます。​​3210が評価されるとき、yが存在するので、ReferenceErrorはスローされず、その値は'undefined'です。したがって、xには未定義の値が割り当てられます。次に、yには'A'という値が割り当てられます。その結果、最初の行の後に、x === undefined && y === 'A'、結果。

Variable Declaration

0

第2の機能出力undefinedあなたはあなたがそれを呼ば後に変数を設定しているため。あなたが書いたコードは、インタプリタによって行ごとに読み込まれ、順番に実行されることを意味する同期です。変数を呼び出す前に変数を定義しないと、コンソールはundefinedを出力します。

This article explains it in more detail.

0

のみ宣言が掲揚され、変数への代入は、常にどこにそのもともとのままです。