qq_兜里有米_04383258
2017-07-03 23:30
function positionMessage(){
var elem=document.getElementById("message");
elem.style.position="absolute";
elem.style.top="100px";
elem.style.left="50px";
moveElement("message",200,100,10);
// movement=setTimeout("moveMessage()",5000);//movement在这里是全局变量,因此可以在函数以外的地方被取消
}
addLoadEvent(positionMessage);
function moveElement(elemID,final_x,final_y,interval){
//elemID传入为 "message"
//传入时已经带有冒号,因此不能再传入冒号,否则无法获取元素ID的值
var elem=document.getElementById(elemID);
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('" + elemID + "'," + final_x + "," + final_y + "," + interval + ")";
movement=setTimeout(repeat,interval);//递归
}我想问的是 为什么在第一次调用moveElement时参数elemID不需要带引号,而通过递归再次调用moveElement时elemID要加上引号了(即repeat中的单引号)。
我从网上已经查了,基本已经明白了加引号的目的是moveElement中的setTimeout的第一个参数必须是字符串。
但是我觉得有一个冲突是:
第一次调用moveElement时,传入的实参时带引号的message,即"message".所以在var elem=document.getElementById(elemID);这里,elemID不用加引号。之前代码一直不对就是这里加了引号导致效果显示不出来。
那既然传入的实参已经加了引号,那为什么再次调用moveElement时却要给elemID加一个单引号呢
第一次传入的实参是字符串,即 "message", 再次调用 var repeat="moveElement('" + elemID + "'," + final_x + "," + final_y + "," + interval + ")"; 里面 elemID 是一个对象,添加加引号,才会变为字符串
JavaScript进阶篇
469056 学习 · 22582 问题
相似问题