javascript - 这两段代码运行效率谁更高,还是说只是编码习惯的问题
PHP中文网
PHP中文网 2017-04-11 11:21:48
[JavaScript讨论组]

第一段:

for(var i=0;i<boxes.length;i++){
    boxes[i].index=i+1;
    boxes[i].onclick=function(){
        alert(this.index)
        }
}

第二段:

for(var i=0;i<boxes.length;i++){
     (function(i){
                 boxes[i].onclick=function(){
                         alert(i+1);
                     }                    
                 })(i);    
}


只看这两段代码,第二段自执行匿名函数的效率比较低吗?
PHP中文网
PHP中文网

认证0级讲师

全部回复(6)
PHPz

第一段代码,当boxes[i].index = i + 1的时候就已经把当时的值赋给index了,不会出现永远输出boxes.length的情况。

原答案有问题,Sorry,没有做好研究就回答:
一起学习内存泄漏

巴扎黑

首先可以肯定的是两种写法都是可以达到同一种效果的。或者说最起码在视觉效果上是相同的。
上边的弹出的是boxes[i]的一个属性index的值。这个弹出值来自于boxes[i];
下边的弹出的是for循环中每个i+1后的值。这个值来自于for循环;

效率问题。。。。还真不好比较 在boxes.length不巨大的情况下两者的效率其实是非常接近的。至少我测试时两者的运行时间是十分接近的。这就要看浏览器的编译速度和计算机的计算速度了。
上边的代码每次for循环要为boxes[i]在内存中开辟一些空间来储存index的值
下边的代买采用闭包把每次的循环的i储存下来作为参数传给匿名函数。虽然省去了开辟空间的时间,但是匿名函数执行需要时间。所以这个比较有点困难

大家讲道理

就理论而言,闭包消耗的资源更多一点,具体的应用就要看实际情况了

天蓬老师

没有可比性,因为第二段是正确写法,第一段不会达到你期望的效果。

巴扎黑

两种都达到想要的效果,如果第一段没有 boxes[i].index=i+1;赋值到index,直接输入i的话就无法达到效果

通常一看到这种代码,第一反应就是闭包,就是第二种方法。

第一种也能达到预期的,可以自己跑一下。

html:

<ul>
  <li class="myLi">1</li>
  <li class="myLi">2</li>
  <li class="myLi">3</li>
</ul>

javascript:

for(var i=0;i<document.getElementsByClassName("myLi").length;i++){
    document.getElementsByClassName("myLi")[i].index=i+1;
    document.getElementsByClassName("myLi")[i].onclick=function(){
        alert(this.index)
        }
}
怪我咯

如楼上所说,没有可比性,第一段代码,无论你按哪一个,永远输出为boxes.length

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号