为了账号安全,请及时绑定邮箱和手机立即绑定

关于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
提交
取消
JavaScript进阶篇
  • 参与学习       468044    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

关于setTimeout调用中的这个函数问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信