使用新函數(){/ * * /}時,您不是創建一個新函數,而是創建一個對象。
這僅僅是一個標準使用的新一個構造函數,像:
var oneInstance = new ConstructorFunction();
function ConstructorFunction() {
this.var1 = 'val1';
this.method1 = function() { } ;
}
不同的是,該構造是正確的,在實例化時定義,我們省略調用的函數,這是合法(雖然我認爲令人困惑)。
,我覺得它在某種程度上與一些支架清晰,明確保證調用構造函數:
var oneOff = new (function() {
this.variablea = "variablea";
this.method = function() {
return xxx;
};
})() ;
但只創建一個單獨的對象,一個寧可使用簡單對象符號:
var oneOff = {
variablea : 'valuea',
method : function() { return xxx; }
}
它們在表演中的表現如何?
對於新的函數(){}方法,創建對象需要首先創建一個函數,然後在「新建」上下文中執行該函數。另一方面,對象只是創建一個對象,所以它創建的時間少,垃圾少。
關於兩種類型對象(讀/寫屬性/使用方法的時間)的使用性能,很難說,因爲所有的JavaScript解釋器都非常複雜和非常不同。在基準測試之前,他們何時以及如何決定優化部分代碼是您無法真正瞭解的。 - 基準測試也不是一件容易的事,因爲這些「隨機」優化。我敢打賭,他們應該是非常接近的使用表現,讓我們知道,如果你花時間做一些措施。
查看[** MDN **](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)? – adeneo
這個用法與MDN –
上提到的「新函數([arg1 [,arg2 [,... argN]],functionBody)」不一樣,我認爲你誤讀了這個例子,因爲你的問題陳述完全錯了。第一段代碼是語法錯誤,您可以通過在瀏覽器控制檯中輸入來進行驗證。 – Pointy