自学javascript,看的是[javascript_DOM编程艺术],有一个地方不太理解,决定到论坛向各位求助!var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
elem.movement = setTimeout(repeat,interval);就是这里,把moveElement函数以及相关参数变成字符串,再赋值到变量repeat,我不明白的地方如下:为什么要拆开转变成字符串?为什么不能如下直接转换,在最外面打上引号?var repeat = "moveElement('elementID',final_x,final_y,interval)";
————————————分割线——————————————另附上整个函数的代码,第一次提问,如果描述不清楚的地方请大家见谅,感谢各位坛友! function moveElement(elementID,final_x,final_y,interval){
if(!document.getElementById) return false;
if(!document.getElementById(elementID)) return false;
var elem = document.getElementById(elementID);
if(elem.movement){
clearTime(elem.movement);
}
if (!elem.style.left){
elem.style.left = 0px;
}
if(!elem.style.top){
elem.style.top = 0px;
}
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){
var dist = math.ceil((final_x-xpos)/10);
xpos = xpos + dist;
}
if(xpox>final_x){
var dist = math.ceil((final_x-xpos)/10);
xpos = xpos - dist;
}
if(ypos<final_y){
var dist = math.ceil((final_y-ypos)/10);
ypos = ypos+dist;
}
if(ypos>final_y){
var dist = math.ceil((final_y-ypos)/10);
ypos = ypos - dist;
}
elem.style.left = xpos+"px";
elem.style.top = ypos+"px";
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
elem.movement = setTimeout(repeat,interval);
 }

解决方案 »

  1.   

    为什么不能如下直接转换,在最外面打上引号?
    var repeat = "moveElement('elementID',final_x,final_y,interval)";

    解释:
    1、定义一个变量repeat ,将moveElement()函数的返回值赋值给变量repeat 
    2、你这样写的意思是:
    moveElement('elementID',final_x,final_y,interval)
    'elementID'变成了一个没有意义的字符串。3、原函数解释:注意,蓝字表示的是传入给函数moveElement的一个参数,表示的是某个元素的ID。这个元素ID是不固定的 function moveElement(elementID,final_x,final_y,interval){
    if(!document.getElementById) return false;
    if(!document.getElementById(elementID)) return false;
    var elem = document.getElementById(elementID);
    if(elem.movement){
    clearTime(elem.movement);
    }
    if (!elem.style.left){
    elem.style.left = 0px;
    }
    if(!elem.style.top){
    elem.style.top = 0px;
    }
    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){
    var dist = math.ceil((final_x-xpos)/10);
    xpos = xpos + dist;
    }
    if(xpox>final_x){
    var dist = math.ceil((final_x-xpos)/10);
    xpos = xpos - dist;
    }
    if(ypos<final_y){
    var dist = math.ceil((final_y-ypos)/10);
    ypos = ypos+dist;
    }
    if(ypos>final_y){
    var dist = math.ceil((final_y-ypos)/10);
    ypos = ypos - dist;
    }
    elem.style.left = xpos+"px";
    elem.style.top = ypos+"px";
    var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
    elem.movement = setTimeout(repeat,interval);
     }
      

  2.   

    感谢1楼这么晚还热心指点!对于自学者来说,迷糊的时候最缺的就是有人能够指点一下,非常感激!之前我隐约是这么理解,但不知道对错,后来这本书快看完了,这点感觉还是没理解透,就在一个群里问了,有人说因为final_x是数值,elementID是字符串,所以要分开拼接,这么一解释我更迷糊了……
      

  3.   

    【有人说因为final_x是数值,elementID是字符串,所以要分开拼接】,以其昏昏,使人昭昭。呵呵我给你个简单例子:
    <script>
    //给三个变量赋值
    var s1="Hello";
    var s2="yjw00x";
    var s3="How are you";
    alert(HandleString(s1,s2,s3));//组合结果:Hello|yjw00x|How are you?function HandleString(a1,a2,a3){//将赋值后的变量作为参数传入“HandleString()”函数,进行字串处理
      var tempStr="";//定义一个中间变量
      tempStr="组合结果:"+a1+"|"+a2+"|"+a3;//将三个参数连接起来
      return tempStr;//将被赋值的中间变量作为函数返回值返回
    }
    var b1="呵呵,";
    var b2="哈哈.";
    var b3="学习苦啊!";
    alert(HandleString(b1,b2,b3));//你的组合结果:a1|a2|学习苦啊!
    function YourHandleString('a1','a2',a3){//红字参数变成固定的字串
      var tempStr="";//定义一个中间变量
      tempStr="你的组合结果:"+a1+"|"+a2+"|"+a3;//将三个参数连接起来
      return tempStr;//将被赋值的中间变量作为函数返回值返回
    }
    </script>你
      

  4.   

    哦,3楼的例子修改一下:
    alert(HandleString(b1,b2,b3));//你的组合结果:a1|a2|学习苦啊!
    ------------>
    alert(YourHandleString(b1,b2,b3));//你的组合结果:a1|a2|学习苦啊!
      

  5.   

    alert(HandleString(b1,b2,b3));//你的组合结果:a1|a2|学习苦啊!
    ------------>
    alert(YourHandleString(b1,b2,b3));//你的组合结果:a1|a2|学习苦啊!
      

  6.   

    OK,看明白了,以后模糊的地方也要多用alert测试区别。谢谢!收工睡觉!