2017-08-29 64 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(); 

並且因此返回與之前相同的功能對象。在附註中,如果有人會解釋何時應該使用var f11 = (function() { return function(param1 = "default") { alert(param1); } }());而不是var f11 = function() { return function(param1 = "default") { alert(param1); } }();,我會喜歡它,我曾見過兩種,一種是外層,另一種是沒有外層,看起來在相同的環境下。

+1

是的,您正在調用外部函數,所以當您執行'f9'時,如果調用'f9',但您正在調用內部函數,則獲得內部函數 – MinusFour

+0

您正在返回一個被調用的函數,然後不會返回任何內容,這意味着它會按預期返回「undefined」。第一個示例返回對函數的引用。 – adeneo

+1

這聽起來像你們說'f9'對象是'不斷調用'的,因爲在附加的'()'中是定義本身的一部分,並不等同於'f10'的例子。任何人爲澄清做出更正式的回答? – gordlonious

回答

2

你的函數返回的內部函數,以撥打報警電話的內部函數,現在是F9

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

 
console.log(f9); 
 
f9();

這將相當於

var f10 = function() { return function(param1 = "default") { alert(param1); } }; 
 
console.log(f10); 
 
var f9 = f10(); 
 
console.log(f9); 
 
f9();

相關問題