setTimeout的参数问题

2011-09-04 14:25:38 +08:00
 jacob
问题在倒数第二行的第一个参数,为什么用了两层引号?

一段用来实现动画的函数,倒数第二行把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);
}
4236 次点击
所在节点    问与答
8 条回复
manhere
2011-09-04 14:29:36 +08:00
用+连接字符串啊
qiao
2011-09-04 14:48:20 +08:00
重新排了下版:

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

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

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

"moveElement('"+elementID+"'," 分为三段:
第一段为:moveElement('
第二段为:elementID
第三段为:',
jacob
2011-09-05 12:59:41 +08:00
@qiao 十分感谢,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/17724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX