2013-03-26 78 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

使用函数表达式的唯一技术原因是为了避免提升函数和/或能够使用另一个内部名称来引用函数本身。

这些是函数表达式和函数声明之间的唯一区别,它取决于上下文是否相关。

相关问题