当前位置: 首页 > news >正文

闭包的好处罗列

好处:
1.希望一个变量长期驻扎在内存当中
2.避免全局变量的污染
3.私有成员的存在

用法:
1.模块化代码
2.在循环中直接找到对应元素的索引

模块化代码

var aaa = (function(){
var a = 1;
function bbb(){ a++; alert(a); } function ccc(){ a++; alert(a); } return { b : bbb, c : ccc } })(); aaa.b(); //2 aaa.c(); //3 alert(a); //报错找不到a,因为这里的a已经私有化了,避免了全局污染

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

function aaa(){
    var a = 1; //程序结束后,这个a的内存不会被释放
    return function(){
        a++;
        alert(a);
    }
}

var b = aaa();   //或者不这样赋值调用,而是直接aaa()()这样用

b();  //2
b();  //3
alert(a);//报错找不到a,因为这里的a已经私有化了,避免了全局污染

被污染的a

var a = 1;
function aaa(){
    a++;
    alert(a);
}

aaa();  //2
aaa();  //3
alert(a);//能够被调用,此时的a为全局

在循环中直接找到对应元素的索引

var aLi = document.getElementsByTagName('li');
    
    for(var i=0;i<aLi.length;i++){
    
        (function(i){
        
            aLi[i].onclick = function(){
                alert(i);
            };
        
        })(i);
        
        
    }
//当然还可以这样指定索引值来完成
for(var i=0;i<aLi.length;i++){
        aLi[i].index=i;
         aLi[i].onclick =function(){
             alert(this.index)
         }
    }    

 在IE下引发内存泄露的处理方法

window.onload = function(){
    var oDiv = document.getElementById('div1');
    
    oDiv.onclick = function(){
        alert(oDiv.id);
    };
    
    window.onunload = function(){ //在最后释放掉内存
        oDiv.onclick = null;
    };
    
};

 

转载于:https://www.cnblogs.com/Model-Zachary/p/6294741.html

相关文章:

  • Knuth-Morris-Pratt Algorithm
  • cas记录
  • spring事物的传播行为及隔离
  • 华为通报 6 名前中高层被抓疑泄露资料给乐视酷派
  • linux cp/scp命令+scp命令详解
  • 在Spring Boot中使用Spring Retry
  • 用C#开发Windows服务监控系统使用
  • 8VC Venture Cup 2017 - Elimination Round - A
  • PostgreSQL SystemTap on Linux
  • Java 操作XML,JDOMDOM4J
  • React怎么创建.babelrc文件
  • JavaSE 学习参考:switch语句
  • Git使用技巧(1)-- 配置【持续更新】
  • Maven 上传 jar 到 私服命令
  • 我们发的不是红包,而关系证明
  • .pyc 想到的一些问题
  • [iOS]Core Data浅析一 -- 启用Core Data
  • chrome扩展demo1-小时钟
  • gops —— Go 程序诊断分析工具
  • Java编程基础24——递归练习
  • jdbc就是这么简单
  • markdown编辑器简评
  • React系列之 Redux 架构模式
  • Redux系列x:源码分析
  • Spring-boot 启动时碰到的错误
  • Vue实战(四)登录/注册页的实现
  • vue总结
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 一份游戏开发学习路线
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 正则学习笔记
  • 从如何停掉 Promise 链说起
  • 大数据全解:定义、价值及挑战
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2)nginx 安装、启停
  • (9)目标检测_SSD的原理
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (二)windows配置JDK环境
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (新)网络工程师考点串讲与真题详解
  • (转)iOS字体
  • (转)Unity3DUnity3D在android下调试
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET建议使用的大小写命名原则
  • .NET开源快速、强大、免费的电子表格组件
  • .Net组件程序设计之线程、并发管理(一)