Javascript 有什么理由把函数作为变量吗?

Javascript 有什么理由把函数作为变量吗?,javascript,design-patterns,Javascript,Design Patterns,在编辑其他人的代码时,我遇到了一个以前从未见过的模式: var functionName=函数functionName(){} 稍后,使用jQuery调用函数 $(函数名) 现在,在我将其更改为使用functionName()调用的标准functionName(){},有没有其他的理由 编辑:更新以反映函数调用中jQuery的使用。我过分简化了这个例子。(哎呀!对不起!)[编辑] 您可以找到var functionName=function(){}并以这种方式创建尽可能多的实例var secon

在编辑其他人的代码时,我遇到了一个以前从未见过的模式:

var functionName=函数functionName(){}

稍后,使用jQuery调用函数

$(函数名)

现在,在我将其更改为使用
functionName()调用的标准
functionName(){}
,有没有其他的理由

编辑:更新以反映函数调用中jQuery的使用。我过分简化了这个例子。(哎呀!对不起!)

[编辑]
您可以找到
var functionName=function(){}并以这种方式创建尽可能多的实例
var second=functionName
只有当您希望有几个变量来调用同一个函数,但使用不同的参数时,它才有用

但是在您的例子中,functionName将只包含
函数functionName(){}将返回

在函数内容中可能有类似的内容:

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

我认为这是一个bug,因为
functionName将不会执行任何操作。还是你的问题有误?

函数名

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

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

不叫它。实际上,这根本不起任何作用(无操作)。这和

var x;
x;
只有这个

functionName()
叫它


可能是
函数名用于其他内容。我们只能在有上下文的情况下才能判断。

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

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

var workerFn = function someDefaultFn() {};

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

//// later on

workerFn();

因此,现在我们可以灵活地确定调用什么。有点像穷人的多态性。在您的示例中,我们将workerfn传递给要调用的JQuery,因此灵活性的可能性是相同的。

创建函数别名比较容易,但大多数情况下非常简单。
functionName
不会调用函数。你需要
()
(或者
new
apply
setTimeout
,等等)才能调用函数。啊,@Quentin,你完全正确。调用被包装在jQuery中:
$(codeAddress)。我不知道这很重要。我会更新这个问题。也许可以解释为什么最初的开发人员在函数调用中使用变量存储的匿名函数。谢谢@ScrapsedCola,这个问题开始看起来像是这个问题的翻版,而且jQuery也有点反模式。你能详细说明你的答案吗?每个函数都是一个对象,您可以从构造函数中创建任意数量的实例,无论它是如何定义的。函数的副本(对函数的引用)不是该函数的实例(使用
var instance=new functionName(args);
函数foo(){};var bar=foo;
也很好。这不是使用函数表达式的理由。我仍然错了吗?对不起,上一篇文章,有时,我的想法消失了…;)你的答案越来越令人困惑。你想用代码片段表达什么?我们缺少一些代码。修正了这个问题。很抱歉。
var workerFn = function someDefaultFn() {};

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

//// later on

workerFn();