2013-03-26 55 views
1

編輯別人的代碼,我碰到一個模式跑到我以前沒有見過:有任何理由有一個函數作爲變量?

var functionName = function functionName(){};

和晚些時候,調用函數,使用這個jQuery

$(functionName);

現在,在將其更改爲functionName();調用的標準function functionName(){}之前,是否有任何理由以其他方式執行此操作?

編輯:更新爲反映在函數調用中使用jQuery。我簡化了這個例子。 (哎呀!對不起!)

+3

創建函數的別名更容易,但大多數情況下相當微不足道。 – BenM 2013-03-26 16:47:49

+1

'functionName'不會調用一個函數。你需要'()'(或'new','apply','setTimeout'等)來調用函數。 – Quentin 2013-03-26 16:50:56

+0

啊,@Quentin,你說的沒錯。該調用包裝在jQuery中:'$(codeAddress);'。沒有意識到這很重要。我會更新這個問題。 – 2013-03-26 16:53:44

回答

2
var workerFn = function someDefaultFn() {}; 

if (lots of logic) { 
    workerFn = function specialFn() {}; 
} 

//// later on 

workerFn(); 

所以現在我們對於調用什麼具有靈活性。排序一個窮人的多態性。在你的例子中,我們將workerFn傳遞給JQuery來調用,所以靈活性相同。

-1

[編輯]
你可以找到var functionName = function(){};,使盡可能多的情況下這樣var second = functionName;
只有當你想有幾個變量調用同樣的功能會非常有用,但有不同的PARAM ...

但在你的情況,functionName將只包含function functionName() {};將返回。

您propably在功能內容是這樣的:

var functionName = function test(param) { 
    [...] 
    return function(otherParam) { 
     //do something 
    }; 
} 
+0

你能否詳細說明你的答案?每個函數都是一個對象,您可以從構造函數中創建任意數量的實例,無論它是如何定義的。 – 2013-03-26 16:51:13

+0

(函數引用)的副本不是該函數的實例(它是用'var instance = new functionName(args);' – Quentin 2013-03-26 16:54:29

+0

'function foo(){}; var bar = foo;'創建的那麼這是沒有理由使用函數表達式 – 2013-03-26 16:56:01

0

我會說這是一個錯誤,因爲functionName;不會做任何事情。或者這是你的問題中的錯字?

0

functionName;

不會調用該函數。這只是對該功能的參考。調用函數需要()。因此,如果我們有

var functionName = function test(){ alert("0");}; 

functionName; 

不會調用它。實際上,這根本不會做任何事情(無操作)。這是一樣的

var x; 
x; 

僅此

functionName() 

調用它。

也許functionName;用於別的東西。只有我們有上下文,我們才能說出來。

+0

我們有一些缺少的代碼。修復了這個問題。對於那個很抱歉。 – 2013-03-26 16:58:57

1

使用函數表達式的唯一技術原因是爲了避免提升函數和/或能夠使用另一個內部名稱來引用函數本身。

這些是函數表達式和函數聲明之間的唯一區別,它取決於上下文是否相關。

相關問題