我正在创建自己的类似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
};
})();