看书遇到遇到这样一个问题。
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函数时,这个参数是什么意思。为什么加了双引号有加+号??
双引号包裹的是前面 shakeWin( 这一句,+stepld+是字符串操作,为了和前后的字符串组合成setiomeout中的函数名.stepld是变量 ,例如如果此时stepld的值为1拼接后就是("shakeWin( 1);",20)
我认为if(!step)step=0;这句话不是判断类型而是判断有无传入值,没有传入参数则赋值为0,有传入参数则直接运行下面的代码。如果你是只把!去掉,变成:if(step)step=0;的话,只要你有传入参数就会被赋值为0,而没有传入参数的话,step为undefined,那么后面的代码就运行不起来了。而当你加回!后,传入参数7,由于switch里的case只进行了0-4的判断,7的值会执行default的内容。
<!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>
图上的颜色其实已经很明确的说明了为什么加了双引号又加+号了。
黄色部分是这个计时器要执行的函数名称,而红色加号中间的stepId是参数,传入黄色字符函数的参数。至于这个参数是什么意思,估计你要结合书里前后的代码内容看看。
如何你不使用加号,这个参数的值就变成了“stepId”,意义不同了。
这段代码就是一个带传入参数的计时器,里面有一个根据传入参数不同执行不同内容的判断(switch那段)。