關(guān)于setTimeout調(diào)用中的這個(gè)函數(shù)問題
看書遇到遇到這樣一個(gè)問題。
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)
調(diào)用shakeWin函數(shù)時(shí),這個(gè)參數(shù)是什么意思。為什么加了雙引號(hào)有加+號(hào)??
2016-10-08
雙引號(hào)包裹的是前面?? shakeWin( 這一句,+stepld+是字符串操作,為了和前后的字符串組合成setiomeout中的函數(shù)名.stepld是變量 ,例如如果此時(shí)stepld的值為1拼接后就是("shakeWin( 1);",20)
2016-10-19
我認(rèn)為if(!step)step=0;這句話不是判斷類型而是判斷有無傳入值,沒有傳入?yún)?shù)則賦值為0,有傳入?yún)?shù)則直接運(yùn)行下面的代碼。如果你是只把!去掉,變成:if(step)step=0;的話,只要你有傳入?yún)?shù)就會(huì)被賦值為0,而沒有傳入?yún)?shù)的話,step為undefined,那么后面的代碼就運(yùn)行不起來了。而當(dāng)你加回!后,傳入?yún)?shù)7,由于switch里的case只進(jìn)行了0-4的判斷,7的值會(huì)執(zhí)行default的內(nèi)容。
2016-10-09
2016-10-08
圖上的顏色其實(shí)已經(jīng)很明確的說明了為什么加了雙引號(hào)又加+號(hào)了。
黃色部分是這個(gè)計(jì)時(shí)器要執(zhí)行的函數(shù)名稱,而紅色加號(hào)中間的stepId是參數(shù),傳入黃色字符函數(shù)的參數(shù)。至于這個(gè)參數(shù)是什么意思,估計(jì)你要結(jié)合書里前后的代碼內(nèi)容看看。
如何你不使用加號(hào),這個(gè)參數(shù)的值就變成了“stepId”,意義不同了。
這段代碼就是一個(gè)帶傳入?yún)?shù)的計(jì)時(shí)器,里面有一個(gè)根據(jù)傳入?yún)?shù)不同執(zhí)行不同內(nèi)容的判斷(switch那段)。