两个函数的定义和赋值是否有任何区别?
this.foo = new (function () {..})();
VS
this.foo = function (){...};
答案 0 :(得分:8)
在第一个例子中,它创建一个函数并执行它,将结果赋给this.foo。在第二个例子中,它创建了函数并将函数本身分配给this.foo。
答案 1 :(得分:3)
主要区别在于使用“new”调用函数并将匿名函数分配给变量
因此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)
你的第一个例子是完全错误的,你真的尝试过吗?如果您想使用new
和Function
构造函数,它的工作原理如下:
foo = new Function("function body");
(这是定义函数的最差方式)
示例2是要走的路。