spe*_*der 5 javascript function
在内存消耗方面,这些是等价的,还是我们为后者的每个对象获得一个新的函数实例?
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);
}
Run Code Online (Sandbox Code Playgroud)
和
var items=[];
for(var i=0;i<10;++i)
{
var item={"animal":"monkey"};
item.alertAnimal=function(){alert(this.animal);};
items.push(item);
}
Run Code Online (Sandbox Code Playgroud)
编辑
我认为为了使闭包正常工作,第二个实例确实会在每次传递时创建一个新函数.它是否正确?
您应该使用第一个方法,因为第二个方法每次解释器传递该行时都会创建一个函数.
关于你的编辑:我们始终处于相同的范围,因为JavaScript具有函数作用域而不是块作用域,所以这可能是可优化的,但我没有遇到每次都不创建它的实现.我建议不要依赖这个(可能是可能的)优化,因为如果你广泛使用这种技术,那么缺乏支持的实现可能会超出内存限制(这很糟糕,因为你不知道将运行什么实现,对吧?).
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |