• 闭包


    1.什么是闭包

    函数嵌套函数,内部函数可以引用外部的参数和变量,参数和变量不会被垃圾回收机制所收回,外部函数最终返回内部函数的函数名。

    从垃圾回收机制来看,一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

    例如:

     1 function test(num){
     2         var sum=5;
     3         function alertSum(){
     4             sum+=num;
     5             alert(sum);
     6         }
     7             return alertSum;
     8     }
     9     var a=test(5);
    10     a();//10

    2.闭包的作用,应用在哪里

    • 好处

      1.希望一个变量长期驻扎在内存中

      2.避免全局变量的污染

      3.私有成员的存在,保护内部变量不被外部调用

    • 实际用法:

      1.模块化代码,减少全局变量污染。

     1 (function(){ 2 //模块化代码 3 })() 

    2.在循环中不用设置index直接找到对应元素的索引。

    1 var aBtn = document.getElementsByTagName('button');
    2   for(var i = 0; i < aBtn.length; i++){
    3       (function(i){
    4           aBtn[i].onclick=function(){
    5               //do something
    6           }
    7       })(i);
    8   }

    顺便说一下return

    当在 <a href="abc.htm" onclick="return add_onclick()">Open</a> 中
    如果函数 add_onclick() 返回 true, 那么 页面就会打开 abc.htm
    否则, (返回 false), 那么页面不会跳转到 abc.htm, 只会执行你的 add_onclick() 函数里的内容. (add_onclick函数中控制页面转到 abc.htm除外

    )
    而 <a href="abc.htm" onclick="add_onclick()">Open</a>
    不管 add_onclick() 返回什么值, 都会在执行完 add_onclick 后打开页面 abc.htm

    另外补充:
    onclick事件时就相当于onclick="return true/false"
    例:

     1 function check()
     2 {
     3 if(obj.value=="" )
     4    {
     5      window.alert("不能为空!");
     6      obj.focus();
     7      return false;
     8    }
     9      return true;
    10 }

    调用方法返回true时才提交表单,反之则不提交,这是submit按钮

  • 相关阅读:
    OSGI .Net 框架学习
    ArcEngine开发过程中的空间关系
    ITOCControl添加鼠标右键菜单
    IHookHelper的使用
    ITopologicalOperator接口调用
    GeoProcessor的使用方法
    ArcEngine内置工具条
    OSGI.NET插件方式开发你的应用
    C#在linux上运行实现
    Linux 下随机启动自己的应用 -请使用while(true) 不要Console.ReadKey()
  • 原文地址:https://www.cnblogs.com/colaman/p/6230758.html
Copyright © 2020-2023  润新知