Heim > Fragen und Antworten > Hauptteil
Da ist etwas, das ich nicht ganz verstehe. Diesmal habe ich einen Code gesehen, der das Problem sehr gut erklärt:
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)
}
Ich habe nur eine Frage:
var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";
In diesem Absatz elementID
,final_x
,final_y
,interval
werden die vier Parameter übergeben. Mit Ausnahme des ersten, der eine Zeichenfolge ist, sind die letzten drei alle Zahlen.
Das erste, was ich nicht verstehe, ist, warum diese Parameter in Anführungszeichen eingeschlossen werden müssen. Das zweite, was ich nicht verstehe, ist, was das Pluszeichen hier bewirkt. Eine andere Frage ist, warum diese Zeichenfolge wie elementID
in doppelte Anführungszeichen gesetzt wird. Unter welchen Umständen ist dies notwendig?
Im Allgemeinen denke ich, dass das Pluszeichen zum Zusammenfügen von Zeichenfolgen geeignet ist, aber das ist hier offensichtlich nicht der Fall. Ein Paar Anführungszeichen ist ein unabhängiges Leerzeichen.
PHP中文网2017-05-18 11:01:41
1.引号包住的是逗号
2.123456+"somestring"→"123456somestring"
3.elementId是String型参数所以加引号
世界只因有你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?