<script>
sayHi();
if (1) {
function sayHi() { console.log(1) }
} else {
function sayHi() { console.log(2) }
}
</script>
chrome->console では、次のように表示されます。2
質問:
なぜif(1)=false
?
<script>
sayHi();
if (1) {
function sayHi() { console.log(1) }
} else {
function sayHi() { console.log(2) }
}
</script>
chrome->console では、次のように表示されます。2
質問:
なぜif(1)=false
?
これらの関数定義は、その条件の実行時には定義されていません。どちらの関数も最初に巻き上げられ、後者は前者を上書きします。
if(1)
常に true と評価されます。
この巻き上げはまさに、関数が定義される前に明らかに関数を呼び出すことを可能にするものです。次のコードはログ1
に記録されますが、その場合は条件の後に呼び出す必要があることに注意してください。そうしないと、エラーが発生しますundefined is not a function
。
if (1) {
var sayHi = function() { console.log(1) }
} else {
var sayHi = function() { console.log(2) }
}
sayHi();