[英]Where should I define my Javascript closure?
我正在創建自己的類似JavaScript Array的對象,並且有一些調用閉包的方法。 我只是想知道在哪里定義封閉最有效的地方。
例如,假設我有一個map函數和一個chop函數:
MyObject.prototype =
{
map: function(fn) { ... applies fn to each element ... };
chop: function()
{ this.map(
function(element)
{
... chop off last character ...
}
)};
}
這樣做更有效嗎?
MyObject.prototype =
{
map: function(fn) { ... applies fn to each element ... };
__chop: function(element)
{
... chop off last character ...
}
chop: function()
{ this.map(this.__chop) };
}
第二個效率更高。 這個
chop: function()
{ map(
function(element)
{
... chop off last character ...
}
)}
將在每次調用chop()
時創建一個新的函數對象,並具有相應的運行時和內存開銷。 由於將沒有對新對象的任何持久引用,因此可以立即對其進行大量收集,但是創建不必要的對象仍然是不明智的做法。
我建議采用以下模式:
MyObject.prototype = (function() {
function map(fn) { ... }
function chopElement(element) { ... }
function chop() {
this.map(chopElement);
}
return {
map : map,
chop : chop
};
})();
在JavaScript中,創建函數或查找函數都不是代價高昂的操作,因此,如果您有一個其中包含相當數量的元素的“數組”,則這兩種方法之間的差異可以忽略不計。
換一個函數閉包,換一個函數閉包不會導致更高效的代碼。 內存使用效率最高的是根本不使用閉包的內存。
__proto__ = {
map: function(){},
_chop: function(str){
return str.slice( str.length, -1 );
},
chop: function(arr){
this.map(this._chop, arr);
}
}
這個問題在Google上對於“關閉內存使用率”的評價很高,我認為這沒有資格。 這是一個很難診斷的問題。
這里的答案更多是在閉包中隱藏功能的示例,但是它增加了維護該內存空間來存儲那些私有變量的成本。
實際上,它們是同一件事-隨便哪個可讀性更高。 對於它的價值,我更喜歡第二個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.