javascript での変数の巻き上げに関する次の記事に出くわしました。この記事では、次の 3 点をまとめています。
1. All declarations, both functions and variables, are hoisted to the top of the containing scope, before any part of your code is executed.
2. Functions are hoisted first, and then variables.
3. Function declarations have priority over variable declarations, but not over variable assignments.
var showState = function() {
console.log("Idle");
};
function showState() {
console.log("Ready");
}
showState();
コードがJavaScriptエンジンによって次のように解釈されることを理解しました
function showState() { // moved to the top (function declaration)
console.log("Ready");
}
var showState; // moved to the top (variable declaration)
showState = function() { // left in place (variable assignment)
console.log("Idle");
};
showState();
しかし、要約の 3 番目のポイントの意味がわかりませんでした。3番目のポイントを説明できる人はいますか? 3番目のポイントの意味は何ですか?
3 番目のポイントの説明によると、次のスニペットは 8、関数 bar() を返す必要があります。しかし、未定義、関数 bar() と表示されます。
console.log(foo);
console.log(bar);
var foo = 8;
function bar() {
console.log("bar");
}