2017-02-02 6 views
0

IIFEをパラメータとして使用した関数式ですか?

var dogName = function animalName(name) { 
    console.log("My name is " + name); 
} 

dogName('Scruffy'); 

(function() { 
    console.log("My name is Fido!"); 
})(); 

を意図したとおりに、あなたがdogName( 'だらしない')をコメントアウトした場合、以下の動作します。それはあなたが

(function() { 
    console.log("My name is Fido!"); 
}()); //()) instead of)() 

に生命維持を調整した場合、それは名前の変数だとして、なぜ機能発現は、生命維持を使用してい

My name is Fido! 
My name is undefined 

を出力し、この

My name is function() { 
    console.log("My name is Fido!"); 
} 

を出力し、なぜ生命維持で最後の例の関数式の前に最初に実行されますか?

+1

あなたは明確なセミコロンが含まれている中間行をコメントアウトした場合、それは '関数animalName(名){...}(機能...)' ...生命維持になります。 'animalName'の定義の後に'; 'を入れます。 – deceze

+1

関連:['TypeError':' console.log( '...') 'は関数ではありません](http://stackoverflow.com/q/31013221/4642212)。 – Xufox

答えて

4

問題は、関数式の最後にセミコロンを置かないことです。

var dogName = function animalName(name) { 
    console.log("My name is " + name); 
}(function() { 
    console.log("My name is Fido!"); 
})(); 

限り通訳は、あなたが、関数として戻り値を呼び出そうという名前の関数式の最初の引数としての機能を渡している、言うことができるように:あなたのコードは、基本的に、このように解釈されます。

これを修正するには、式の最後にセミコロンを入れます。

var dogName = function animalName(name) { 
 
    console.log("My name is " + name); 
 
}; // <-- 
 

 
(function() { 
 
    console.log("My name is Fido!"); 
 
})();

+1

いい説明、ありがとう! – Chad

関連する問題