亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號