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

来源:8-5 计时器setTimeout()

无敌小哥儿

2016-10-07 21:34

看书遇到遇到这样一个问题。

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回答

  • fdsgasgg
    2016-10-08 10:41:30
    已采纳

    双引号包裹的是前面   shakeWin( 这一句,+stepld+是字符串操作,为了和前后的字符串组合成setiomeout中的函数名.stepld是变量 ,例如如果此时stepld的值为1拼接后就是("shakeWin( 1);",20)

    无敌小哥儿

    再打扰一下,能解释一下 if(!step)step=0; 这句话吗??这个是干什么用的?起初我认为是用在当函数传递参数时,参数类型错误时,这句话能把函数中参数赋值为 0 所以我认为这句话有错,就把 ! 非去掉了,但是当我调用函数时,写成 shake(a) 时,不执行,写成 shake(7)时,窗口直接向左上角跑去了,拖回来又自动跑过去 。。我又加上 ! ,又调用 shake(a),shake(7), 都没有反应。。。。具体代码贴在下面了。

    2016-10-09 20:49:12

    共 2 条回复 >

  • CrazyQueen
    2016-10-19 09:26:00

    我认为if(!step)step=0;这句话不是判断类型而是判断有无传入值,没有传入参数则赋值为0,有传入参数则直接运行下面的代码。如果你是只把!去掉,变成:if(step)step=0;的话,只要你有传入参数就会被赋值为0,而没有传入参数的话,step为undefined,那么后面的代码就运行不起来了。而当你加回!后,传入参数7,由于switch里的case只进行了0-4的判断,7的值会执行default的内容。

    CrazyQ... 回复无敌小哥儿

    不客气

    2016-10-21 07:46:04

    共 2 条回复 >

  • 无敌小哥儿
    2016-10-09 20:32:55
    <!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>


  • CrazyQueen
    2016-10-08 10:50:00

    http://img.mukewang.com/57f85bc20001131804730026.jpg

    图上的颜色其实已经很明确的说明了为什么加了双引号又加+号了。

    黄色部分是这个计时器要执行的函数名称,而红色加号中间的stepId是参数,传入黄色字符函数的参数。至于这个参数是什么意思,估计你要结合书里前后的代码内容看看。

    如何你不使用加号,这个参数的值就变成了“stepId”,意义不同了。

    这段代码就是一个带传入参数的计时器,里面有一个根据传入参数不同执行不同内容的判断(switch那段)。

    无敌小哥儿

    打扰一下,能解释一下 if(!step)step=0; 这句话吗??这个是干什么用的?起初我认为是用在当函数传递参数时,参数类型错误时,这句话能把函数中参数赋值为 0 所以我认为这句话有错,就把 ! 非去掉了,但是当我调用函数时,写成 shake(a) 时,不执行,写成 shake(7)时,窗口直接向左上角跑去了,拖回来又自动跑过去 。。我又加上 ! ,又调用 shake(a),shake(7), 都没有反应。。。。具体代码贴在下面了。

    2016-10-10 23:49:20

    共 2 条回复 >

JavaScript进阶篇

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

468060 学习 · 21891 问题

查看课程

相似问题