onclick和闭包

之前我的文章提到调用外部闭包的函数,并不会触发里面的匿名的函数.只会返回函数体.但是一位热心的读者说不是这样,他说下面这段代码就是调用外部函数也直接运行了匿名函数.


这个时候不仅调用了外层的函数,同时也运行了里面的函数.但是,有一个特殊的地方就是,加了一个onclick绑定事件. 让我们看一看没有onclick绑定时候的情况.

function move(speed){
return function(){
box.style.left = box.offsetLeft + speed + "px";
console.log("I am function")
}
}
move(200);

  • 这个时候,普通的调用的时候 却没有触发function.也没有输出 "I am function".点击也没有任何效果

  • 所以在普通情况下, 闭包中匿名的函数没有被调用. 但是涉及到类似onclick的绑定事件.就直接调用了.我认为原因如下

    window.onload=function () {
    var a=document.getElementById("a")
    function c(){
    alert(1);
    }
    function b(){
    alert(2);
    }
    a.onclick=c();b();
    }

onClick可以同时绑定两个函数,甚至两个以上. 所以在上面那段代码事件可能是这样

btn1.onclick = move(-20);function(){ box.offsetLeft+speed+"px"}

  • 实际调用了move()和全局的匿名的函数.
posted @ 2017-03-08 15:22  MaxProAim  阅读(965)  评论(0)    收藏  举报