javascript - 达夫设备循环问题
天蓬老师
天蓬老师 2017-04-11 12:30:41
[JavaScript讨论组]

今天在看《高性能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--),就可以循环全部了,到底咋回事,难道书上印错了,还是我眼睛花了,就大神指点。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
大家讲道理

--iterations时

startAt = 4,执行
    case 4: console.log(count++);//0
    case 3: console.log(count++);//1
    case 2: console.log(count++);//2
    case 1: console.log(count++);//3
--iterations = 0---->false停止。

iterations--时

startAt = 4,跳至case 4 执行
    case 4: console.log(count++)//0;
    case 3: console.log(count++)//1;
    case 2: console.log(count++)//2;
    case 1: console.log(count++)//3;
--iterations = 1---->true再来一遍。
startAt=0,跳至case 0,执行
    case 0: console.log(count++);//4
    case 7: console.log(count++);//5
    case 6: console.log(count++);//6
    case 5: console.log(count++);//7
    case 4: console.log(count++);//8
    case 3: console.log(count++);//9
    case 2: console.log(count++);//10
    case 1: console.log(count++);//11
--iterations = 0--->false停止
不加break还会执行后面的case语句。

可能你是switch case不加break怎么运行没搞清楚吧。

天蓬老师

那里的两段代码都有问题,你说的这一段改成while(iterations--)当数组长度是8的倍数时同样有问题

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

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