var timer = null;
window.onload = function() {
var oBtn = document.getElementById('btn');
oBtn.onclick = startMove(2);
};
function startMove(speed) {
var oDiv = document.getElementById('box');
clearInterval(timer);
timer = setInterval(function() {
if (oDiv.offsetLeft >= 500) {
clearInterval(timer);
} else {
oDiv.style.left = oDiv.offsetLeft + speed + 'px';
}
}, 30);
}
如上 运行起来 一打开页面div就开始运动,但是如果改成
oBtn.onclick = function(){
          startMove(2);
};
就能够正常运行。哪位师兄能够解释一下这个现象嫩

解决方案 »

  1.   

    oBtn.onclick = startMove(2); 这里直接调用了,不是事件绑定
    如果不带参数可以 oBtn.onclick = startMove;
    带参数就还是用oBtn.onclick = function(){
              startMove(2);
    };这种方式
      

  2.   

    这函数调用 有点乱啊 你 我感觉oBtn,click(function(){startMove(2)});是不是好一点呢
      

  3.   

    onclick = function(){}  绑定事件,触发click,是直接执行function,特么的不想说了, 直接改成 onclick = startMove; 就行了,如果要传入参数直接按照你写的方法就好了
    http://blog.csdn.net/qq_29594393/article/details/53032842
    http://blog.csdn.net/qq_29594393/article/details/52805390
      

  4.   

    JS中的函数是一种叫做Function引用类型的实例,因此函数是一个对象。函数名则是指向这个对象的引用地址。
    做为一个对象,函数是可以赋值传递的。
    onclick是个事件,事件所需要的是函数对象的引用地址。函数名后面不加圆括号()就是获取函数对象的引用地址,(这样不调用执行函数)。
    如果不带参数可以 oBtn.onclick = startMove; 表示把startMove这个函数对象的引用地址赋值给oBtn.onclick。
    带参数就用oBtn.onclick = function(){startMove(2)};表示创建一个新的函数对象把这个新的函数对象的引用地址赋值给oBtn.onclick。函数名后面的圆括号()实际上是调用(执行)函数的运算符。
    如果函数名后面加上圆括号就表示立即调用(执行)这个函数里面的代码。