zoukankan      html  css  js  c++  java
  • onclick和闭包

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


          <script type="text/javascript">
              function move(speed){ 
                  return function(){ 
                      box.style.left = box.offsetLeft + speed + "px";
                  }
              }
              btn1.onclick = move(-20);
              btn2.onclick = move(20);
          </script>
    
    这个时候不仅调用了外层的函数,同时也运行了里面的函数.但是,有一个特殊的地方就是,加了一个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()和全局的匿名的函数.
  • 相关阅读:
    websocketpp相关
    大地水准面、大地基准面
    ubuntu18.04 和 qt 5.13.1 安装
    高斯——克吕格投影反算
    高斯——克吕格投影正算
    缓和曲线10麦克康奈尔
    vsCode 需安装的扩展
    显示windows电脑上已连接过的wifi密码
    linux Java项目CPU内存占用高故障排查
    tcpdump常用参数说明及常见操作
  • 原文地址:https://www.cnblogs.com/maxaimee/p/6519633.html
Copyright © 2011-2022 走看看