递归函数中的参数连接

时间:2014-09-09 09:42:50

标签: javascript dom scripting

这个例子来自书" dom scripting" - 杰里米基思。

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);
}

我不明白为什么这一行有这么多串联

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

3 个答案:

答案 0 :(得分:1)

这是因为var repeat实际上是函数调用的字符串表示,而不是函数本身。

要在代码中执行相同的操作(不使用字符串),您可以执行以下操作:

    var repeat = function() { moveElement(elementId, final_x, final_y, interval); }
    movement = setTimeout(repeat, interval);

答案 1 :(得分:1)

这是调用函数的奇怪方法。你永远不应该使用string作为setTimeout和setInterval的第一个参数,我不建议用这种例子来读书。

正确的方法是通过所需的函数调用传递一个无穷大的函数。

答案 2 :(得分:0)

因为repeat包含moveElement函数的调用。我们知道传递给函数的参数必须用,分隔。所以在这里我们将变量的值与coma连接起来以获得将调用函数moveElement

的字符串