达夫设备循环问题
今天在看《高性能javascript》这本书,看到达夫设备优化的代码:
do{}while(--n);这里前减,假设是12长度的循环,iterations取整是1,那怎么也不会有第二次8次的循环吧?
//长度
var a=[1,2,3,4,5,6,7,8,9,10,11,12];
var iterations=Math.floor(a.length/8);
console.log("iterations:"+iterations);
var startAt=a.length%8;
console.log("取余:"+startAt);
var count=0;
do{
switch(startAt){
case 0: console.log(count++);
case 7: console.log(count++);
case 6: console.log(count++);
case 5: console.log(count++);
case 4: console.log(count++);
case 3: console.log(count++);
case 2: console.log(count++);
case 1: console.log(count++);
}
startAt=0;
}while(--iterations);//这里前减,不是就=0了,没有进入下一次循环,最终就4次循环。
结果:
而我改成while(iterations--)
,就可以循环全部了,到底咋回事,难道书上印错了,还是我眼睛花了,就大神指点。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
--iterations时
iterations--时
可能你是switch case不加break怎么运行没搞清楚吧。
那里的两段代码都有问题,你说的这一段改成while(iterations--)当数组长度是8的倍数时同样有问题
是书上印错了,可以改成
while(iterations--)
,或者改成while(--iterations > 0)