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

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

關于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函數時,這個參數是什么意思。為什么加了雙引號有加+號??

正在回答

4 回答

雙引號包裹的是前面?? shakeWin( 這一句,+stepld+是字符串操作,為了和前后的字符串組合成setiomeout中的函數名.stepld是變量 ,例如如果此時stepld的值為1拼接后就是("shakeWin( 1);",20)

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

無敵小哥兒 提問者

非常感謝,我懂了。
2016-10-09 回復 有任何疑惑可以回復我~
#2

無敵小哥兒 提問者

再打擾一下,能解釋一下 if(!step)step=0; 這句話嗎??這個是干什么用的?起初我認為是用在當函數傳遞參數時,參數類型錯誤時,這句話能把函數中參數賦值為 0 所以我認為這句話有錯,就把 ! 非去掉了,但是當我調用函數時,寫成 shake(a) 時,不執行,寫成 shake(7)時,窗口直接向左上角跑去了,拖回來又自動跑過去 。。我又加上 ! ,又調用 shake(a),shake(7), 都沒有反應。。。。具體代碼貼在下面了。
2016-10-09 回復 有任何疑惑可以回復我~

我認為if(!step)step=0;這句話不是判斷類型而是判斷有無傳入值,沒有傳入參數則賦值為0,有傳入參數則直接運行下面的代碼。如果你是只把!去掉,變成:if(step)step=0;的話,只要你有傳入參數就會被賦值為0,而沒有傳入參數的話,step為undefined,那么后面的代碼就運行不起來了。而當你加回!后,傳入參數7,由于switch里的case只進行了0-4的判斷,7的值會執行default的內容。

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

無敵小哥兒 提問者

謝謝,我搞懂了。。我一直有個誤解,就是傳入參數如果不是0,那么!step就為0。。。非常感謝
2016-10-19 回復 有任何疑惑可以回復我~
#2

CrazyQueen 回復 無敵小哥兒 提問者

不客氣
2016-10-21 回復 有任何疑惑可以回復我~
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>窗口抖動</title>
<script?type="text/javascript">
function?shake(step){
var?step;
if(!step)step=0;
switch?(step){
case?0:?moveBy(-5,-5);break;
case?1:?moveBy(10,0);break;
case?2:?moveBy(-10,10);break;
case?3:?moveBy(10,0);break;
case?4:?moveBy(-5,-5);break;
default?:?return;
}
step++;
setTimeout("shake("+step+")",20);
}
</script>
</head>
<body>
<input?type="button"?onclick="shake()"?value="點我抖動窗口">
</body>
</html>


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

http://img1.sycdn.imooc.com//57f85bc20001131804730026.jpg

圖上的顏色其實已經很明確的說明了為什么加了雙引號又加+號了。

黃色部分是這個計時器要執行的函數名稱,而紅色加號中間的stepId是參數,傳入黃色字符函數的參數。至于這個參數是什么意思,估計你要結合書里前后的代碼內容看看。

如何你不使用加號,這個參數的值就變成了“stepId”,意義不同了。

這段代碼就是一個帶傳入參數的計時器,里面有一個根據傳入參數不同執行不同內容的判斷(switch那段)。

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

無敵小哥兒 提問者

非常感謝
2016-10-09 回復 有任何疑惑可以回復我~
#2

無敵小哥兒 提問者

打擾一下,能解釋一下 if(!step)step=0; 這句話嗎??這個是干什么用的?起初我認為是用在當函數傳遞參數時,參數類型錯誤時,這句話能把函數中參數賦值為 0 所以我認為這句話有錯,就把 ! 非去掉了,但是當我調用函數時,寫成 shake(a) 時,不執行,寫成 shake(7)時,窗口直接向左上角跑去了,拖回來又自動跑過去 。。我又加上 ! ,又調用 shake(a),shake(7), 都沒有反應。。。。具體代碼貼在下面了。
2016-10-10 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于setTimeout調用中的這個函數問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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