Hoistingトップに宣言を移動するのはJavaScriptのデフォルトの動作です。
JavaScriptの宣言が掲揚されています
JavaScriptでは、変数は、それが使用された後に宣言することができます。
言い換えると; それが宣言される前に変数を使用することができます。
例1、 例2と同じ結果が得られます。
例1
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
var x; // Declare x
»それを自分で試してみてください 例2
var x; // Declare x
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
»それを自分で試してみてください これを理解するには、用語を理解しなければならない"hoisting" 。
Hoisting (現在のスクリプトまたは現在の関数の先頭に)現在のスコープの先頭にすべての宣言を移動するのはJavaScriptのデフォルトの動作です。
JavaScriptの初期化が掲揚されていません]です
JavaScriptは、宣言だけではなく、初期化をホイスト。
例1、 例2と同じ結果を与えるものではありません 。
例1
var x = 5; // Initialize x
var y = 7; // Initialize y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
»それを自分で試してみてください 例2
var x = 5; // Initialize x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
var y = 7; // Initialize y
»それを自分で試してみてください yは最後の例で定義されていないことをそれは意味がありますか?
のみ宣言(varの各y)は、いない初期化が(= 7)トップに掲揚されているためです。
そのためのhoisting 、それを使用する前に、yが宣言されていますが、初期化が掲揚されていないため、yの値は未定義です。
例2は、書き込みと同じです。
例
var x = 5; // Initialize x
var y; // Declare y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
y = 7; // Assign 7 to y
»それを自分で試してみてください 上部に変数を宣言します!
Hoisting (多くの開発者に)のJavaScriptの不明または見落とさ動作です。
開発者が理解していない場合はhoisting 、プログラムがバグ(エラー)を含有してもよいです。
バグを回避するために、常にすべてのスコープの開始時にすべての変数を宣言します。
これはJavaScriptのコードを解釈する方法であるので、それは常に良いルールです。
strictモードでのJavaScriptは、それらが宣言されていない場合は、変数を使用することはできません。
研究では、 "use strict"次の章で。