搜索

首页  >  问答  >  正文

javascript - 变量引入,引号,加号的使用问题

我一直有一个地方不是很理解,这次看到一段代码很能说明问题:

function moveElement (elementID, final_x, final_y, interval) {
    var elem = document.getElementById(elementID);
    var xpos = parseInt(elem.style.left);
    var ypos = parseInt(elem.style.top);
    ......
    var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";
    movement = setTimeout(repeat, interval)
}

我的疑问只有一个地方:

var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";

在这一段里,elementID,final_x,final_y,interval四个是传入的参数,除了第一个是字符串,后面三个都是数字。

我第一个不能理解的地方是这些参数为什么要加引号,第二个不能理解的是这里的加号有什么作用么。还有一个问题是像elementID这个字符串,为什么包了两层引号,在什么情况下需要这么做?

加号一般我认为适用于字符串拼接,但在这里显然不是这样,一对引号就是一个独立的空间,加号包裹在这里面有什么意义么。

PHPzPHPz2753 天前597

全部回复(4)我来回复

  • PHP中文网

    PHP中文网2017-05-18 11:01:41

    1.引号包住的是逗号
    2.123456+"somestring"→"123456somestring"
    3.elementId是String型参数所以加引号

    回复
    0
  • 滿天的星座

    滿天的星座2017-05-18 11:01:41

    变量最后转为字符串啊!数字+引号 变字符穿 如果你需要的参数是字符串而不是数字

    回复
    0
  • 漂亮男人

    漂亮男人2017-05-18 11:01:41

    这里的字符串在setTimeout里相当于eval的用法,是指你想要在delay毫秒之后执行的代码字符串

    回复
    0
  • 世界只因有你

    世界只因有你2017-05-18 11:01:41

    首先,这里的加号的确是用来字符串拼接

    var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";

    的结果就是

    var repeat = "moveElement(elementID, final_x, final_y, interval)"

    只是,将这个名叫repeat的字符串变量作为参数传给了setTimeout, 即在interval毫秒后,执行repeat

    var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";
    movement = setTimeout(repeat, interval)

    这里其实基本等同于

    movement = setTimeout(function () {
        moveElement(elementID, final_x, final_y, interval)
    }, interval)

    这样应该比较好理解吧?

    但是这两种方式还是有区别,一般不大推荐题主说的这种方式,具体可见window.setTimeout、Running string as function in javascript setTimeout?

    回复
    0
  • 取消回复