7

Stoyan Stefanov による "JavaScript Patterns" 本には、自己定義関数に関する部分があります。

var scareMe = function(){
    console.log("Boo!");
    scareMe = function(){
        console.log("Double Boo!"); 
    }
}

scareMe();//==>Boo!
scareMe();//==>Double Boo!

期待どおりに動作します。ただし、scareMe 関数を次のように変更します。

function scareMe(){
     console.log("Boo!");
     function scareMe(){
         console.log("Double Boo!");
     }
 }

 scareMe();//==>Boo!
 scareMe();//==>Boo!

問題:

  1. それらの違いは何ですか?
  2. 2 番目のケースでは、出力が「Double Boo!」ではなく「Boo!」である理由を説明します。
4

3 に答える 3