V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jacob
V2EX  ›  问与答

setTimeout的参数问题

  •  
  •   jacob · 2011-09-04 14:25:38 +08:00 · 4236 次点击
    这是一个创建于 4827 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问题在倒数第二行的第一个参数,为什么用了两层引号?

    一段用来实现动画的函数,倒数第二行把setTimeout的参数先赋值个repeat(纯粹是方便起见),我看不懂第一个+elementID+为什么用单引号和双引号括起来,其他的不就只是一个双引号吗,而且那些加号是怎么回事
    function moveElement(elementID,final_x,final_y,interval) {
    if (!document.getElementById) return false;
    if (!document.getElementById(elementID)) return false;
    var elem = document.getElementById(elementID);
    var xpos = parseInt(elem.style.left);
    var ypos = parseInt(elem.style.top);
    if (xpos == final_x && ypos == final_y) {
    return true;
    }
    if (xpos < final_x) {
    xpos++;
    }
    if (xpos > final_x) {
    xpos--;
    }
    if (ypos < final_y) {
    ypos++;
    }
    if (ypos > final_y) {
    ypos--;
    }
    elem.style.left = xpos + "px";
    elem.style.top = ypos + "px";
    var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
    movement = setTimeout(repeat,interval);
    }
    8 条回复    1970-01-01 08:00:00 +08:00
    manhere
        1
    manhere  
       2011-09-04 14:29:36 +08:00
    用+连接字符串啊
    qiao
        2
    qiao  
       2011-09-04 14:48:20 +08:00
    重新排了下版:

    <pre>
    var repeat = "moveElement('" +
    elementID +
    "'," +
    final_x +
    "," +
    final_y +
    "," +
    interval +
    ")";
    </pre>

    这样楼主应该懂了吧,其实就是字符串的concatenation
    darasion
        3
    darasion  
       2011-09-04 15:20:13 +08:00
    给setTimeout传递一个字符串型的“函数”,通常是不推荐的做法。

    据说这样不易出错:
    setTimeout(function(){
    ///要做的事.
    }, 123456);
    darcy
        4
    darcy  
       2011-09-04 15:42:35 +08:00 via iPod
    糟糕的代码
    jacob
        5
    jacob  
    OP
       2011-09-04 18:41:28 +08:00
    @qiao 我知道他是字符串拼接,实在是搞不明白这一段究竟哪些是匹配的 "moveElement('"+elementID+"',"
    jacob
        6
    jacob  
    OP
       2011-09-04 18:45:22 +08:00
    @qiao
    是不是这样的
    " moveElement('
    "
    +elementID+
    "
    ',
    "
    qiao
        7
    qiao  
       2011-09-04 19:51:40 +08:00
    @jacob 总之注意每两个双引号中间的内容是一段字符串。不要被那个单引号迷惑,那个单引号也是字符串的一部分。

    "moveElement('"+elementID+"'," 分为三段:
    第一段为:moveElement('
    第二段为:elementID
    第三段为:',
    jacob
        8
    jacob  
    OP
       2011-09-05 12:59:41 +08:00
    @qiao 十分感谢,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5411 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:31 · PVG 11:31 · LAX 19:31 · JFK 22:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.