为了账号安全,请及时绑定邮箱和手机立即绑定

关于while和pop

为什么是用while循环来判断pop?而不是用if?而且while循环不是如果不增加条件中所用变量的值,该循环永远不会结束,可能导致浏览器崩溃吗?还有一个不懂的地方,就是这里:

while(balls.length > count){
        balls.pop();
    }

不是说从count到balls.length-1的小球都是可以删掉的,可是pop不是只能删除数组最后一个元素吗?可以删掉的小球难道就只有一个吗,不会有两个三个?

我把我这里的代码贴一下:

function updateBalls(){
    for( var i = 0 ; i < balls.length ; i++){
        balls[i].x += balls[i].vx;
        balls[i].y += balls[i].vy;
        balls[i].vy += balls[i].g;
        if( balls[i].y >= WINDOW_HEIGHT - RADIUS ){
            balls[i].y = WINDOW_HEIGHT - RADIUS
            balls[i].vy = -balls[i].vy*0.6;
        }
        var count = 0;      //记录保留在画布中小球的数量
        if( balls[i].x + RADIUS > 0 && balls[i] - RADIUS < WINDOW_WIDTH ){      //这个序号为i的小球仍然在画布中
            balls[count++] = balls[i];
        }
    }
    while(balls.length > count){
        balls.pop();
    }
}


正在回答

3 回答

我觉得之所以用while而不是if,因为while是循环执行,如果满足条件会一直执行,所以不断删除满足条件的小球。而如果是if的话,那么执行一次updateBalls函数只执行一次 if也就是说只删除一个小球,while的话,执行一次upadate会执行好多次while里的代码删除多个小球。 pop执行一次删除一个,执行多次就删除多个。。。

0 回复 有任何疑惑可以回复我~
#1

慕粉3584185 提问者

非常感谢!
2016-10-21 回复 有任何疑惑可以回复我~
#2

慕后端9417217

谢谢!
2017-08-17 回复 有任何疑惑可以回复我~

同学 ,你这个的原因出现在var count = 0; 定义地方写错, 应该写在循环之外,不然你这个每次循环都是重新定义为0。

0 回复 有任何疑惑可以回复我~

if是判断,while是循环,老师先循环了小球数组,把还在区域内可见的小球重新排列在了原来数组的前面,如果有n个小球可见,那么在这个数组内,第N个后面的小球都应该被删除。这里不能用if的原因是,一次update的执行不能只考虑一个小球消失了,就像不能只考虑一个小球的位置刷新了一样,有可能是好几个小球的位置都刷新了,同时又有很多小球消失了,所以需要把小球数组遍列,对每个小球进行判断。用到了while,这里的while循环并不是死循环,这个循环有个条件,就是如果当前数组的长度大于在屏幕中可见的小球的个数,那么证明还没有删除完,一次pop的执行会删除一个元素,所以当前数组长度会不断减小,当当前数组的长度等于可见小球的个数,该循环便会停止。这里用if肯定是不可以的,for()循环还可以,但是while用起来比for循环方便些。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于while和pop

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信