为什么这样“this.foo = new(function(){..})();”与“this.foo = function(){...};”

时间:2010-08-16 16:21:05

标签: javascript

两个函数的定义和赋值是否有任何区别?

this.foo = new (function () {..})();

VS

this.foo = function (){...};

3 个答案:

答案 0 :(得分:8)

在第一个例子中,它创建一个函数并执行它,将结果赋给this.foo。在第二个例子中,它创建了函数并将函数本身分配给this.foo。

答案 1 :(得分:3)

主要区别在于使用“new”调用函数并将匿名函数分配给变量

ECMA 262 15.3.2: 当Function作为新表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。

因此this.foo = new (function () {..})();会创建一个新对象并将其分配给this.foo

this.foo = function (){...};定义了一个匿名函数并将其分配给this.foo

另一种方式是this.foo = (function () {..})();(没有“新”)将调用该函数并将其返回值赋给this.foo

在您的情况下,如果您发出警报:

var foo = new (function () {})();
var bar = function() {};
var baz = (function () {return "boo";})(); // without the "new"

alert(foo); // will alert [object Object], the newly created object
alert(bar); // will alert function) {}, the function itself
alert(baz); // will alert "boo", the functions return value

答案 2 :(得分:-2)

你的第一个例子是完全错误的,你真的尝试过吗?如果您想使用newFunction构造函数,它的工作原理如下:

foo = new Function("function body");

(这是定义函数的最差方式)

示例2是要走的路。