就内存消耗而言,这些是否等效,或者我们是否为后者中的每个对象获得一个新的函数实例?
var f=function(){alert(this.animal);}
var items=[];
for(var i=0;i<10;++i)
{
var item={"animal":"monkey"};
item.alertAnimal=f;
items.push(item);
}
and
var items=[];
for(var i=0;i<10;++i)
{
var item={"animal":"monkey"};
item.alertAnimal=function(){alert(this.animal);};
items.push(item);
}
EDIT
我认为为了让闭包正常工作,第二个实例确实会在每次传递时创建一个新函数。它是否正确?
您应该更喜欢第一种方法,因为每次解释器通过该行时,第二种方法都会创建一个函数。
关于您的编辑:我们始终处于同一作用域,因为 JavaScript 具有函数作用域而不是块作用域,所以这might可以优化,但我没有遇到不是每次都创建它的实现。我建议不要依赖这种(可能是可能的)优化,因为如果您广泛使用此技术,缺乏支持的实现可能会超出内存限制(这很糟糕,因为您不知道什么实现将运行它,对吧?)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)