先來看看生活中的一些場景:
(1)食堂阿姨打菜:接過顧客的餐盤→詢問菜品→打菜→遞迴餐盤,重複以上過程,直到所以顧客的菜都打完了。
(2)快遞員送快遞:檢視送件位址→趕往目的地→**告知收件人→收件人簽收→交快遞件,重複以上過程,直到所有需要送的快遞都處理完了。
以上場景都有乙個共同的特點:有條件地重複地做一件事,每一次做的事情不同但類似。
程式是偽類解決實際問題的,實際問題中存在這重複動作,那麼程式中也應該有相應的描述,這就是迴圈。
但是這兩種方案的描述方式都不太理想,如果是要加到10000呢?
注意觀察方案二,它重複地做一件事(將乙個數加到sum2中),每一次做的不同但是類似。
我們希望能找到一種更好的描述方式
/*方案三:改造方案二*/
var sum3 = 0;
var n = 1;
while(n <= 10)
方案三表達的含義和方案二一樣,但是表達方式要好得多,比如加到
10000,只需要把條件n<=10改為n<=10000
white是表示「當……則……」,也就是當某個條件成立時,則一直重複做。
開啟除錯工具,在watch視窗分別檢視sum、n以及n<=10的值,可以從指示器看到迴圈的執行過程,檢測變數的變化。
do……while迴圈和while迴圈的區別在於,前者是先執行後判斷(先斬後奏),後者則是先判斷再執行,如果條件不滿足,前者也會執行依次。所以do……while至少會執行依次。
案例:輸出所有水仙花數
案例:gdp**
總結一下迴圈的套路
(1)初始狀態
(2)迴圈條件
(3)迴圈體(要重複做的事情)
(4)為下次迴圈作準備()
那如何去寫迴圈的程式呢?回答四個問題:
(1)初始狀態是怎樣的
(2)重複做的條件是什麼
(3)重複做什麼
(4)怎麼過渡到下一次迴圈
水仙花數問題
gdp**
初始狀態
narnum = 100
var year = 2009;
var usgdp = 142562.75;
var chinagdp = 49089.82
迴圈條件
narnum <= 999
usgdp >= chinagdp
迴圈體var hundreds = math.floor(narnum / 100);
var decade = math.floor(narnum / 10) % 10;
var theunit = narnum % 10;
var sum = hundreds * hundreds * hundreds + decade * decade * decade + theunit * theunit * theunit;
if(sum == narnum)
usgdp = usgdp*1.02;
chinagdp = chinagdp*1.08;
為下次迴圈作準備
narnum++;
year++;
案例:計算圓周率,π=
(1-1/3+1/5-1/7+
……)*4
最後一項的絕對值小於
10-6
分析:將公式稍微變化一下
1-1/3+1/5-1/7+……
變化為(+1/1)+(-1/3)+(+1/5)+(-1/7)+……
那麼它和我們之前解決的1+2+3+……
+10的問題就非常類似了,都是累加的問題,只不過每次加的內容不同而已。
我們可以將每一項拆分為三部分:
t = 符號
*1/分母
(1)初始狀態是怎樣的
sum = 0;
t = 1;
sign = 1;
deno = 1;
(2)重複做的條件是什麼
|t| >= 10-6
(3)重複做什麼
sum += t;
(4)怎麼過渡到下一次迴圈
sign = -sign;
deno += 2;
t = sign*1/deno;
for迴圈是比較常用的乙個迴圈結構,能用while和do……while寫的迴圈都可以用for迴圈來寫,它把初始條件和為下次迴圈做準備的條件放在了for後面對括號中。
格式:for(初始條件;迴圈條件;為下次迴圈做準備)
找出所有水仙花數的案例,用for迴圈來寫
for(var num=100; num<=999; num++)
}
JavaScript中的this詳解
this屬於js的底層知識,了解this之後,能夠實現一些基本的功能,但是感覺最重要的是,this是物件導向必不可少的組成部分,如果希望能夠逐漸的掌握物件導向,this必然是不可少的。檢視this指向的一句話法則 永遠指向其所在函式的所有者如果沒有所有者時,指向window。理解this的要點 關鍵...
JavaScript中的setInterval用法
setinterval function,interval arg1,arg2,argn setinterval object,methodname,interval arg1,arg2,argn 第一種格式是標準動作面板中setinterval函式的預設語法,第二種格式是在專家模式動作中使用的方法...
JavaScript中的陣列
陣列 引數 返回值原陣列是否改變 1 向陣列尾部新增push 引數可以是乙個或多個 返回值是新增後陣列的長度 原陣列改變 2 刪除陣列的最後一項pop 沒有引數 返回值是刪除的那個數 原陣列改變 3 向陣列的頭部新增unshift 引數可以是乙個或多個 返回值是新增後陣列的長度 原陣列改變 4 刪除...