2013-05-10 89 views
1

下面的代碼會做什麼?什麼是這個JavaScript

我已經使用了JS多年,但沒有想到這個構造是如何工作的?

(function() { /* No implementation yet */ })(); 

知道沒有實現 - 如果有 - 我將如何調用它?以下是否會創建一個匿名對象?

var temp = (function() { })(); 

,我可以用如下:

temp.doWhateverDefined(); 
+0

除非你從功能有些功能(doWhateverDefined)返回你不能。 – 2013-05-10 17:21:11

+1

它已被調用。它意味着創建一個局部變量作用域的一次性使用函數。 – 2013-05-10 17:22:07

+0

它是一個匿名函數,它剛剛被定義後調用.... – Piyuesh 2013-05-10 17:22:16

回答

0

這是一個匿名函數,所以,除非你把它分配給一個名字

var temp = (function() { })(); 
你不能調用,您創建超過該行的其他

這段代碼應改爲

var temp = (function() { }); 

這樣你實際上分配的功能名稱。要調用它只需使用圓括號

temp() 
4

您有immediately invoked function expression (IIFE)。這在JavaScript中很常見。

+0

這就像一個很酷它就像內聯代碼被執行,但在一個函數範圍 - 但沒有明確調用任何函數? – 2013-05-10 17:31:04

+0

@ Alex.Barylski它顯式調用包裝代碼的匿名函數。在JavaScript中,您可以通過添加parens'()'來調用函數。這定義了一個函數,然後通過在末尾附加'()'來立即調用它。值得注意的是,最終的'()'可以在OR包圍之外。 '(function(){}())'和'(function(){})()'一樣好' – Mathletics 2013-05-10 17:34:03

0

這是一個自我執行的功能。你不會調用它,它會自動執行。

var temp = (function() { })();會工作,如果函數返回的東西。

1

立即運行。這是因爲如果你說:

var f = function() { /* No implementation yet */ } 
(f)(); 

這是一樣的

var f = function() { /* No implementation yet */ } 
f(); 

它的要點是允許的代碼(頁面初始化等)的模塊使用任何變量/函數名它喜歡,而不會與其他可能使用相同名稱的Javascript代碼相沖突。所有功能/等。在該區塊宣佈的是本地的,不會傷害外部世界。

2
(function() { /* No implementation yet */ })(); 

這被稱爲立即調用函數表達式或簡稱爲IIFE。它被立即聲明,評估和調用。

的基本思路是:

var x = (function() { return 5;})(); 
alert(x); //5 
+2

或* IEFE *?我想這也可以。 ;-) – 2013-05-10 17:26:43

0

你有什麼是已經被稱爲自調用函數。

var temp = (function() { })(); 

所以函數必須返回一個功能,使得溫度()或temp.somethin();可能會被觸發。看一個例子以下更多信息,

var temp = (function() { return { 
    doWhateverDefined: function() { 
     return 'invoked';} 
     }; 
    } 
)(); 

alert(temp.doWhateverDefined()); //should alert invoked 

DEMO:http://jsfiddle.net/5ch8F/1/

+0

謝謝所有的答覆...我有點想它被稱爲立即後被定義,但我很欣賞IIFE博客多數民衆贊成真棒:) – 2013-05-10 17:29:54