差異

2013-02-28 93 views
-1

在這個問題上,我不想問「功能」,我想問一下「功能」拼圖差異

<script type="text/javascript"> 
    var test = function() { 
     alert('a'); 
    }; 

    var test1 = new function() { 
     alert('b'); 
    }; 
</script> 

爲什麼它會彈出「b」?

+0

請參閱http://stackoverflow.com/questions/2274695/new-function-with-lower-case-f-in-javascript – xbonez 2013-02-28 06:14:49

回答

0

new function將執行該功能,您可以使用IIFE(立即─調用函數表達式),以及:

var test1 = (function() { 
    alert('b'); 
}()); 
1

功能(P1,P2,...,PN,身體)

當使用一些參數p1,p2,...,pn,body(其中n可能爲0,也就是說,沒有「p」參數,並且body也可能不會被提供)調用函數函數,則採取以下步驟:

創建並返回一個新的Function對象f標準內置構造函數函數用於具有相同參數的新表達式中。

檢查:Is JavaScript's "new" keyword considered harmful?

0

new用於在Javascript工廠模式。 它通過執行構造函數來創建並返回一個對象。在你的情況下,使用new是沒有意義的。

0

其內置的函數被用作構造函數不需要括號,如果你不傳遞任何參數:

var Person = function() { this.is_alive = true; }, 
    bob = new Person; 

bob.is_alive; 

...但任何函數可以被稱爲構造函數,不管你是否使用返回的對象或不...

new function() { console.log("Bob"); } 

這不會保存任何地方的功能 - 它會立即運行它,到位,即刻。

0

有關新關鍵字的基本描述,請參見What is the 'new' keyword in JavaScript?

實際上,您正在調用構造函數到一個新的對象。我來給你展示。

var Animal = function(name) { 
    alert("Animal Created: " + name); 
} 

jaguar = new Animal("Cool"); 

從唯一的區別以及你所做的是聲明在同一行的功能定義新的對象:

jaguar = new function(name) { 
    alert("Animal Created: " + name); 
} 

這就是爲什麼「B」被打印出來。