關于setTimeout調用中的這個函數問題
看書遇到遇到這樣一個問題。
function shakeWin(stepId){
????var stepId;
????if(!stepId)stepId=0;
????switch(stepId){
????????????case 0: window.moveBy(-5,-5);break;
? ? ????????case 1: window.moveBy(10,0);break;
? ? ????????case 2: window.moveBy(-10,-10);break;
? ? ????????case 3: window.moveBy(10,0);break;
? ? ????????case 4: window.moveBy(-5,-5);????break;
????????????default:return;
}
? ? ? ? stepId++;
????????setTimeout(" ? shakeWin( ?"+stepId+" ?) ? ?;",20);
}
setTimeout(" ? shakeWin( ?"+stepId+" ?) ? ?;",20)
調用shakeWin函數時,這個參數是什么意思。為什么加了雙引號有加+號??
2016-10-08
雙引號包裹的是前面?? shakeWin( 這一句,+stepld+是字符串操作,為了和前后的字符串組合成setiomeout中的函數名.stepld是變量 ,例如如果此時stepld的值為1拼接后就是("shakeWin( 1);",20)
2016-10-19
我認為if(!step)step=0;這句話不是判斷類型而是判斷有無傳入值,沒有傳入參數則賦值為0,有傳入參數則直接運行下面的代碼。如果你是只把!去掉,變成:if(step)step=0;的話,只要你有傳入參數就會被賦值為0,而沒有傳入參數的話,step為undefined,那么后面的代碼就運行不起來了。而當你加回!后,傳入參數7,由于switch里的case只進行了0-4的判斷,7的值會執行default的內容。
2016-10-09
2016-10-08
圖上的顏色其實已經很明確的說明了為什么加了雙引號又加+號了。
黃色部分是這個計時器要執行的函數名稱,而紅色加號中間的stepId是參數,傳入黃色字符函數的參數。至于這個參數是什么意思,估計你要結合書里前后的代碼內容看看。
如何你不使用加號,這個參數的值就變成了“stepId”,意義不同了。
這段代碼就是一個帶傳入參數的計時器,里面有一個根據傳入參數不同執行不同內容的判斷(switch那段)。