-1
<script>
sayHi();
if (1) {
  function sayHi() {  console.log(1)  }
} else {
  function sayHi() {  console.log(2)  } 
}
</script> 

chrome->console では、次のように表示されます。2

質問:

なぜif(1)=false

4

1 に答える 1

3

これらの関数定義は、その条件の実行時には定義されていません。どちらの関数も最初に巻き上げられ、後者は前者を上書きします。

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();
于 2013-07-04T04:29:01.430 に答える