最近在学习Javascript DOM 编程艺术这本书,在第十章遇到了一个setTimeout 的传值问题,综合网上各位大神及自己的理解,做一个简单的解释。源代码如下:
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); }这段代码的功能为将id 为elementID的元素移动至final_X ,final_Yz坐标中去,每次移动一个位置 间隔时间为interval。
问题是 repeat 这个变量中 出现了很多的单引号双引号,这表示什么意思呢?首先 setTimeout(code,millisec),在参数code这里可以传字符串 也可以传函数。具体到本例中使用的是字符串的形式,既然要使用字符串 那就要把字符串给拼接起来(用repeat来实现的)。我们要的最终字符串是这样的:
moveElement('elementID',final_X,final_Y,interval) 由于elementID final_X final_Y interval是变量 所以拼接字符串的时候不要加引号,其他的常量需要加引号,也就等于需要这样拼接:
moveMentElement('
elementID
',
final_X
,
final_Y
,
interval
这样引号的位置就确定了。
另外一种方式是直接传入函数,写法为:
function(){
} 用法是一样的。moveElement(elementID,final_X,final_Y,interval)