2008-03-13
关于js函数占用内存的疑问
<ul id="ul1">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script>
var lis = document.getElementById('ul1').getElementsByTagName('li');
for(var i=0;i<lis.length; i++)
{
lis[i].onclick=function(){
alert(this.firstChild.nodeValue);
};
}
</script>
请问匿名函数是否占用了3份内存?
恳请赐教!
xieye
20080313
评论
zqrain
2008-03-28
afcn0 写道
其实函数对象占用的内存远远比不上其声明所包含的scope chain当中的执行环境,与其在这里讨论到底是一份还是3份,不如讨论下new Function取代function(){.....}是否有意义
愿闻其详!能否解释的更详细一点?
afcn0
2008-03-14
其实函数对象占用的内存远远比不上其声明所包含的scope chain当中的执行环境,与其在这里讨论到底是一份还是3份,不如讨论下new Function取代function(){.....}是否有意义
srdrm
2008-03-14
占三份又能占多少呢? 你做成匿名的还不是因为代码比较少. 代码多了, 这样写可读性太差. 多的话做成有名的, 然后再赋上就只有一份了
xieye
2008-03-14
既然高手都这么说,我就放心了。当然,太长的函数我还是会单独提取出来,尽管我本不想起函数名。多谢!
xuyongping
2008-03-14
ajaxgo 写道
对,三个Function实例,其引用不相等,即
lis[i].onclick != lis[j].onclick (i!=j)
lis[i].onclick != lis[j].onclick (i!=j)
我还是同意你的观点。。。我也赞成。。有三个function 实例。。既然有三个实例。。就会占用三分内存。。。
ajaxgo
2008-03-14
我觉得没必要考虑那么多,研究这些还不如优化上层代码。管js解释器到底是不是对这类匿名函数进行优化,尽量确保不生成相同的匿名函数,是最安全最高效的。
和其他语言的一样,把公用代码抽象成接口。
和其他语言的一样,把公用代码抽象成接口。
sp42
2008-03-13
同意前两位的观点。
Function类型是JS中很特殊的类型。
可以试着在debug环境下做做实验并观察之。
Function类型是JS中很特殊的类型。
可以试着在debug环境下做做实验并观察之。
fins
2008-03-13
同意楼上 这个问题好像以前讨论过
印象中 hax 和 afcn0 都参与过那个讨论 呵呵
印象中 hax 和 afcn0 都参与过那个讨论 呵呵
afcn0
2008-03-13
不对,!=并不代表内存如何实现,我认为js解释器是当成一个function对象的,优化
xuyongping
2008-03-13
其实楼上的已经回答了你呀。。
xuyongping
2008-03-13
是占用了三个。。
这里的三个function 相当于new 了三次虽然new 的三个值是一样的。。(效果是一样的)
这里的三个function 相当于new 了三次虽然new 的三个值是一样的。。(效果是一样的)
xieye
2008-03-13
我更关心的是占用客户机器的内存是否更多,还是只有一份?
ajaxgo
2008-03-13
对,三个Function实例,其引用不相等,即
lis[i].onclick != lis[j].onclick (i!=j)
lis[i].onclick != lis[j].onclick (i!=j)
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 22461 次
- 性别:

- 来自: 南京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
初学python感受
貌似还可以。
-- by techno_it -
我幻想这样一个团体
楼下的在哪个公司呀?
-- by Emy -
我幻想这样一个团体
我们公司就是这样的
-- by taowen -
php5在window下的安装
var node = 树对象的名字.findOneNodeByName('1. ...
-- by xieye -
php5在window下的安装
xieye,请问xytree里不带选择框的树(如示例3),怎么象示例1里那样 展 ...
-- by flysky9820000






评论排行榜