有什么理由将函数作为变量?

时间:2013-03-26 16:46:48

标签: javascript design-patterns

编辑其他人的代码,我遇到了以前没见过的模式:

var functionName = function functionName(){};

稍后,使用此jQuery调用该函数

$(functionName);

现在,在我将其更改为使用function functionName(){}调用的标准functionName();之前,是否有任何理由以另一种方式执行此操作?

编辑:更新以反映在函数调用中使用jQuery。我简化了这个例子。 (糟糕!抱歉!)

5 个答案:

答案 0 :(得分:2)

var workerFn = function someDefaultFn() {};

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

//// later on

workerFn();

所以现在我们可以灵活地调用什么。一个穷人的多态性的类型。在你的例子中,我们将把workerfn传递给JQuery来调用,所以灵活性的可能性相同。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我说这是一个错误,因为functionName;不会做任何事情。或者你的问题是错字吗?

答案 3 :(得分:0)

functionName;

不会调用该函数。这只是对函数的引用。调用该函数需要()。所以,如果我们有

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

functionName;

没有打电话给它。实际上这根本没有做任何事(无操作)。这与

相同
var x;
x;

只有这个

functionName()

调用它。

也许functionName;用于其他内容。我们只能告诉我们是否有上下文。

答案 4 :(得分:-1)

[编辑]
您可以找到var functionName = function(){};并以这种方式制作尽可能多的实例var second = functionName;
只有当你想要几个变量来调用相同的函数,但是使用不同的参数时才有用...

但在您的情况下,functionName将仅包含function functionName() {};将返回的内容。

你可以在功能内容中找到这样的东西:

var functionName = function test(param) {
    [...]
    return function(otherParam) { 
        //do something
    };
}
相关问题