2017-08-29 3 views
3

この機能:定義の後に()を追加すると、この単純なJs関数は値/オブジェクトを返さないのはなぜですか?

var f8 = function() { return function(param1 = "default") { alert(param1); } } 

は、オブジェクトを返します。ƒ (param1 = "default") { alert(param1); }

しかし、この機能:

var f9 = function() { return function(param1 = "default") { alert(param1); } }(); 

も、関数呼び出しf9();後、しません。どうして?

追加された括弧は、関数が定義された直後に単に外部関数を呼び出すことを私が初心的に理解していました。換言すれば、

var f10 = function() { return function(param1 = "default") { alert(param1); } }; 
f10(); 

と等価であり、それによって以前と同じ関数オブジェクトを返す。 1は、一見同じ文脈で、なくて私は両方見てきたvar f11 = function() { return function(param1 = "default") { alert(param1); } }();var f11 = (function() { return function(param1 = "default") { alert(param1); } }());、外側の括弧を持つもの、とのものを使用する必要があるとき、誰かが説明するだろう場合はサイドノートでは、私はそれを愛するだろう。

+1

はい、あなたは 'f9'を行うときに、内側の関数を取得するので、あなたは' f9'呼び出す場合しかし、あなたはあなたが呼び出される関数を返している – MinusFour

+0

内部関数を呼び出している、外側の関数を呼び出し、その後、されています何も返しません。つまり、期待どおりに 'undefined'を返します。最初の例は、関数への参照を返します。あなたたちは '定義自体の一部であり、' f10'例と同等ではありません)( '追加のように、' f9'オブジェクトが「常に」と呼ばれるていることを言っているよう – adeneo

+1

に聞こえます。説明のために正式な回答をした人は誰ですか? – gordlonious

答えて

2

あなたの関数は、アラートコールにこれは

var f10 = function() { return function(param1 = "default") { alert(param1); } }; 
 
console.log(f10); 
 
var f9 = f10(); 
 
console.log(f9); 
 
f9();
と同等になり、今

var f9 = function() { return function(param1 = "default") { alert(param1); } }(); 
 

 
console.log(f9); 
 
f9();

F9である内部関数を呼び出すために、内部関数を返します