达夫设备循环问题

发布于 2022-09-04 14:49:12 字数 1254 浏览 20 评论 0

今天在看《高性能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次循环。

结果:
clipboard.png

而我改成while(iterations--),就可以循环全部了,到底咋回事,难道书上印错了,还是我眼睛花了,就大神指点。

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

有深☉意 2022-09-11 14:49:13

--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怎么运行没搞清楚吧。

要走就滚别墨迹 2022-09-11 14:49:13

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

慕巷 2022-09-11 14:49:13

是书上印错了,可以改成while(iterations--),或者改成while(--iterations > 0)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文