扫码关注官方订阅号
第一段:
for(var i=0;i
第二段:
认证0级讲师
第一段代码,当boxes[i].index = i + 1的时候就已经把当时的值赋给index了,不会出现永远输出boxes.length的情况。
boxes[i].index = i + 1
原答案有问题,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
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
第一段代码,当
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:
javascript:
如楼上所说,没有可比性,第一段代码,无论你按哪一个,永远输出为boxes.length