下面是《javascript DOM编程艺术》一书10.1节的代码:
 HTML:
 <p id="message">Whee!</p>
  <p id="message2">Whoa!</p>
 
 js:
 function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
} 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);
}function positionMessage() {
  if (!document.getElementById) return false;
  if (!document.getElementById("message")) return false;
  var elem = document.getElementById("message");
  elem.style.position = "absolute";
  elem.style.left = "50px";
  elem.style.top = "100px";
  moveElement("message",125,25,20);
  if (!document.getElementById("message2")) return false;
  var elem = document.getElementById("message2");
  elem.style.position = "absolute";
  elem.style.left = "50px";
  elem.style.top = "50px";
  moveElement("message2",125,75,20);
}
addLoadEvent(positionMessage);我有以下三个问题需要请教:
 ①下面这段代码书中是这样解释的:第一次测试是否相等,我们需要知道变量xpos和ypos的值是否等于目的地那里的“左”位置和“上位置”,如果是,则退出这个函数。
 我的理解:退出函数那不应该是 return false吗?这里怎么是return true呢?这段代码哪位朋友还能给个更浅显些的解释吗?
 if (xpos == 200 && ypos == 100) {
    return true;
  }
  
  ②下面的这段代码应该怎么解释,变量怎么还加引号了?而且第一个变量还是两个引号,+elementID+表示什么呀?这种表示变量的方法改如何称呼?请推荐些相关资料给我。
  
  
  var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
  
 ③函数positionMessage中先后定义了两个相同的变量名:elem,这样不违反js的什么语法规则吗?这两个定义js是如何解析执行的?
 

解决方案 »

  1.   

    1、return false 或者 return true,是给函数一个返回值,也就是函数的执行结果。不是管return false 还是true,只要return了,函数接下来的代码就不执行了。
    2、var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
    这说明 repeat是一个字符串 ,setTimeout函数接收的两个参数 ,一个是字符串,一个是以毫秒为单位的时间段。。
    var str = "alert('x')";
    setTimeout(str,1000); 就样就是一秒后执行alert('x')。上面这个也是一样的道理
    3、javascript,跟 java,c#不一样,重定义变不会出错,最多只是赋值,第二句其实就是
    elem = document.getElementById("message2");
      

  2.   

    感谢@aspwebchh的回答,第二个问题您理解错我的意思了,我是想问函数moveElement的变量名中的加号是什么意思呀?因为声明函数时是这样的:function  moveElement(elementID,final_x,final_y,interval){},怎么到了下面存储变量的时候成了moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")了,其中的变量引号和加号是什么意思呀?
      

  3.   

    第2个问题 你看看 setTimeout 帮助就知道了
      

  4.   

    去看javascript高级程序设计第二版吧。
    javascript DOM编程艺术那本书,前面偏简单,后面偏难。前面看看则已,后面尤其你问问题的这块,难,好多代码没有注释。
    不过现在貌似出第二版了。
      

  5.   

    @KK3K2005
    我就是看的第二版,这部分基本没变。
    加了html5和jquery的部分。