2011-06-16 59 views
0

可能重複:
What do empty parentheses() after a function declaration do in javascript?()之後的函數意味着該函數將立即被觸發?

我在看一些JavaScript代碼,並試圖找出}();在返回num + 10後意味着。這是否意味着函數會立即執行?我在哪裏可以獲得關於此的更多信息。

function addToTen(num) { 
    return function() { 
      return num+10; 
    }(); 
} 
addToTen(5); // 15 

謝謝, 維恩。

+0

是的,它是一個高級的javascript概念,只要您定義它就會執行該功能。我不是JS忍者,但可以告訴你,這個功能可以用來避免全球命名空間的污染。 – Kumar 2011-06-16 05:26:31

+1

好問題!其他人也對此感到好奇:http://stackoverflow.com/questions/2422026/what-do-empty-parentheses-after-a-function-declaration-do-in-javascript – 2011-06-16 05:29:42

回答

3

是的,但只限於它是一個函數表達式,它不同於函數聲明。一個函數的聲明是你的第一個功能是如何定義的:

function foo(){ 
} 

如果在此之後添加(),你會得到一個語法錯誤。如果函數定義爲函數表達式,則添加一組括號會立即執行它。功能時,他們沒有被定義如上表述,例如:

(function(){}()); 

var x = function(){}(); 

return function(){}(); 

您的實際例子只是......奇怪,毫無意義。這是幾乎經典閉合例子,像:

function addTo(x){ 
    return function(y){ 
     return x + y; 
    } 
} 

var addToTen = addTo(10); 
addToTen(5); // 15; 

但實際的例子僅相當於:

function addToTen(num){ 
    return num + 10; 
} 

,所有多餘的東西是完全沒有必要的。

1

是的,這意味着該函數對象進行評估。

就像任何其他的功能,你看它有兩種方式:

var myFunction = function(val) { 
    return val + 1; 
} 
  1. 要返回函數對象,或別的地方把它,我只是說myFunction的
  2. 如果我希望執行它,我說myFunction的()

在這個封閉或裝飾,不管,你已經如上所述,而不是返回函數對象本身,你的exe返回的值立即切割該功能,因此在()之後。

相關問題