以下のコードでは:
(function (){
function test(){};//"function"
var test;//"undefined"
var printTest = typeof test;
document.write(printTest);
})();
printTestは、「undefined」ではなく「function」を表示します。これは、私の理解では、変数宣言は常に実行コンテキスト(この場合は関数実行コンテキスト)の先頭に「持ち上げられる」ためです。これにより、関数宣言が作成されます。 「test()」は、現在の実行コンテキストの後半に表示されるものです。ここで、実際にvar宣言 "var test=1"に値を割り当てるこのコードについて考えてみます。
(function (){
function test(){};
var test=1;//assign value to a variable here
var printTest = typeof test;
document.write(printTest);
})();
次に、printTestは「番号」を表示します。これは、実行コンテキストが異なる順序を維持することを意味します。誰かがここで実際に何が起こったのか説明できますか?