这两个函数表达式之间有什么区别?

时间:2015-08-20 19:47:15

标签: javascript

如果我错了,请纠正我。下面的代码段是一个函数语句:

function foo() {}

其中以下是所有函数表达式。

var foo = function() { } // or
var foo = function foo() { } // or 
var foo = new function() { }

我的问题是,这两种形式的函数表达式有什么区别?

var foo = function() { } // and
var foo = new function() { }

第二个也是构造函数表达式吗?如果是,哪个类(我在这里丢失了单词,我知道JavaScript没有类,但是按类,这里,我的意思是模板或函数或原型)

更新

那些提供相关问题链接的人,非常感谢。对此,我真的非常感激。我正在努力学习这种语言,在这一点上,老实说,我的判断是如此新生,以至于我无法判断他们是否都是同一个问题。我知道我读的越多,虽然我发现它非常迷人,但在这个阶段我越是困惑。我可能需要时间来充分理解这种美妙语言的美妙。同时,请继续提及其他相关主题。

2 个答案:

答案 0 :(得分:9)

var foo = function() { }

实例化一个函数并将foo赋予该函数的引用。

var foo = new function() { }

实例化一个函数,以新对象作为其上下文调用它,并将新创建的对象(或函数的对象返回值)指定为foo的值。该函数本身被丢弃,除非它通过某种方式设法返回自己。

第二段代码在代码中非常罕见,不是由困惑的人编写的。

答案 1 :(得分:1)

函数表达式将函数定义为更大表达式语法(通常是变量赋值)的一部分。通过函数表达式定义的函数可以命名或匿名。

以下是创建函数并赋值给变量foo的函数表达式的示例:

var foo = function() { }

var foo = function foo() { }

当你使用new关键字时,它不会创建一个函数,它只是创建一个对象并将其分配给变量foo,也会调用实例化的函数。

var foo = new function() { }