setTimeout其实是一个递归调用
 我认为是你调用moveElement方法的时候就没有给其参数赋值吧
以后递归调用还是没有这个参数的值

解决方案 »

  1.   

    这是个作用域的问题,setTimeout函数是window的函数,他的作用域是全局,
    而moveElement函数的作用域链是 全局 -> moveElement
    你的element是在moveElement函数里面定义的,全局的setTimeout函数当然是找不到的,
    改成下面这样就没有问题了:
    setTimeout(function(){
    moveElement(element);
    },interval);具体关于作用域的问题,你可以看看下面的文章
    http://blog.csdn.net/hzrui/archive/2009/02/27/3941137.aspx
      

  2.   

    我用的element不是函数体中的那个,而是函数的参数id换成真正的元素。。回到这个函数,那为什么用字符串id传递就不会超出作用域啊??
      

  3.   

    字符串作为参数传递哪有作用域啊,变量才有作用域moveElement("11", ""....
    你说上面的"11"会有作用域问题吗
      

  4.   

    function moveElement(id,final_x,final_y,interval)
    参数id就是个变量啊!它有作用域吧
      

  5.   

    "moveElement('"+id+"',"+final_x+","+final_y+","+interval+")"
    最终的结果是一个字符串啊,假如ID是: 11, finnl_x 是 22,  final_y 是33 interval是44,事实上最后调用的是这样moveElement("11","22","33","44")而不是
    moveElement(id,final_x,final_y,interval) 真的要使用id这个变量的话,是这么写的setTimeout("moveElement(id+,final_x,final_y,interval)",interval);