2010-08-16 62 views

回答

8

在第一個例子,它創建一個函數並執行它,將結果分配至this.foo。在第二個示例中,它創建函數並將函數本身分配給this.foo。

+0

this.foo在第二個例子中,相當於一個函數指針是否正確? – 2010-08-16 16:25:03

+0

@KennyCason:你可以這樣看待它。它將函數分配給當前上下文中的變量「foo」。但是,編寫'function foo(){....}'將完全*做同樣的事情。 – 2010-08-16 16:29:16

+2

@james不完全正確,'function foo()'將它作爲作用域的頂部,'this.foo = function()'在那裏指定它 – Rixius 2010-08-16 16:33:49

-2

你的第一個例子顯然是錯誤的,你真的嘗試過嗎?如果你想使用newFunction構造它的工作原理是這樣的:

foo = new Function("function body"); 

(這是定義一個函數以最壞的方式)

例2是要走的路。

+0

第一個示例中的匿名函數可以返回一個函數,它是然後與'new'運算符一起使用。也許匿名函數是某種對象工廠? – 2010-08-16 16:39:04

+0

其實@Ryan它不會這樣做,除非你在另一層parens中包含該表達式的右側(即整個函數調用)。 「new」運算符至少和()一樣緊密,所以它就像當前寫入的'(new(function(){...}))()'。 – Pointy 2010-08-16 16:41:18

+0

'new function(){...}'很好。它不會和'new Function()'做同樣的事情。它和'new MyConstructor()'完全相同,這是完全有效的。 – 2010-08-16 16:53:32

3

的主要區別是調用一個「新的」和分配匿名函數來可變

ECMA 262 15.3.2功能: 當功能被稱爲新的表達式的一部分,它是一個構造函數:它初始化新創建的對象。

所以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 
相關問題