cdm*_*kay 0 javascript closures
我正在创建自己的JavaScript类数组对象,我有调用闭包的方法.我只是想知道定义闭包的最有效位置在哪里.
例如,假设我有一个map函数和一个chop函数:
MyObject.prototype =
{
map: function(fn) { ... applies fn to each element ... };
chop: function()
{ this.map(
function(element)
{
... chop off last character ...
}
)};
}
Run Code Online (Sandbox Code Playgroud)
这样做更有效率吗?
MyObject.prototype =
{
map: function(fn) { ... applies fn to each element ... };
__chop: function(element)
{
... chop off last character ...
}
chop: function()
{ this.map(this.__chop) };
}
Run Code Online (Sandbox Code Playgroud)
第二个更有效率.这个
chop: function()
{ map(
function(element)
{
... chop off last character ...
}
)}
Run Code Online (Sandbox Code Playgroud)
将在每次调用时创建一个新的函数对象,chop()具有相应的运行时和内存开销.由于不会有任何对新对象的延迟引用,因此可以立即收集行李,但创建超过必要的对象仍然是不好的做法.
我建议采用以下模式:
MyObject.prototype = (function() {
function map(fn) { ... }
function chopElement(element) { ... }
function chop() {
this.map(chopElement);
}
return {
map : map,
chop : chop
};
})();
Run Code Online (Sandbox Code Playgroud)