zoukankan      html  css  js  c++  java
  • js 匿名函数 闭包

    没有弹出框
    <script language="javascript" type="text/javascript">
    function start(){
    var nid=document.getElementsByTagName("li");
    nid.onclick=function(){alert("4");}
    }
    window.onload=start;
    </script>

    这样才有弹出对话框

    <script language="javascript" type="text/javascript">
    function start(){
    var nid=document.getElementsByTagName("li");
    nid.onclick=(function(){alert("4");})()
    }
    window.onload=start;
    </script>

    运行后,不论点击哪一个li,都是alert提示“4”。

    这就是一个需要注意的地方:

    闭包允许内层函数引用父函数中的变量,但是该变量是最终值。闭包引用的变量i,是循环结束后的值

    <script language="javascript" type="text/javascript">
    var li=document.getElementsByTagName("li");
    for(var i=0;i<li.length;i++){
    li[i].onclick=function(){alert(i);}
    }
    </script>

    用闭包来解决

    <script language="javascript" type="text/javascript">
    var li=document.getElementsByTagName("li");
    for(var i=0;i<li.length;i++){
       (function(index){
       li[index].onclick=function(){alert(index);}
       })(i);
    }
    </script>

    注意顺序:先弹出“clicked” 再弹出“also clicked”

    <script>
    var fnClick1 = function(){ alert("clicked"); };
    var fnClick2 = function(){ alert("also clicked"); };
    var oDiv = document.getElementById("div");
    oDiv.attachEvent("onclick",fnClick2);
    oDiv.attachEvent("onclick",fnClick1);
    </script>

     先弹出“also clicked” 再弹出“clicked”

    var oDiv = document.getElementById("div");
    oDiv.attachEvent("onclick",fnClick1);
    oDiv.attachEvent("onclick",fnClick2);
    

     

    .onclick后面的是最先执行的
    attachEvent进去的事件 就DOM的解释是乱续的。
    但实际测试时 IE是后绑定的先执行,FF是先绑定的先执行.

  • 相关阅读:
    一文读懂Lua元表
    React-Antd Pro环境搭建
    如何在QT项目中引入Boost库
    .NET Core RSA PKCS8 格式 签名/验签
    Chrome控制台Network请求过滤
    字符串拼接null值问题
    复制文件夹需要考虑的问题
    [闻缺陷则喜]关于boost的想法
    公共库开发组
    docker-compose 一键部署分布式配置中心Apollo
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1615644.html
Copyright © 2011-2022 走看看