1. 代替全局变量

  1. //闭包应用1:代替全局变量的使用
  2. //多个函数都用到一个变量,通常我们会定义一个全局变量,然后在各函数中应用它,
    //为了避免使用全局变量,可以通过使用立即执行函数定义临时变量,子函数即是闭包函数
    // *********************************实际上任何函数都是全局作用域的内部函数,都能访问全局变量,所以都是window的闭包************************************************
    (function(){
  3. var result='hello';
  4. function fun1(){
  5. alert(result);
  6. }
  7. fun1(); //hello 形成闭包
  8. )();
  9. alert(result); //在立即执行函数外部,这里就访问不到test2
  1. // JQuery的闭包结构:用一个函数域包起来,就是所谓的沙箱
  2. // 在这里边 var 定义的变量,属于这个函数域内的局部变量,避免污染全局
  3. // 把当前沙箱需要的外部变量通过函数参数引入进来
  4. // 只要保证参数对内提供的接口的一致性,你还可以随意替换传进来的这个参数
  5. (function(window, undefined) {
  6. // jQuery 代码
  7. })(window);

2. 把方法当参数的情况,使用闭包

  1. // 1)延时函数
  2. function fun1(arg){
    return function(){console.dir(arg);}
    }
  3. var test=fun1('hello');//返回f3的内部函数的引用
  4. setTimeout(test,100); //这里直接传递fun1是不正确的
  5.  
  6. // 2)方法注册
  7.  
  8. document.getElementById("hello").onclick=test;//正确,
  9.  
  10. document.getElementById("hello").attachEvent("onclick",test);//正确,

3. 惰性模式: 减少代码每次执行时的重复性判断,通过重新定义对象来避免原对象中的分支判断,提高网站性能。

  1. // 每次调用方法时,都会进行条件的判断。
  2. var AddEvent = function(dom, type, fn){
  3. if(dom.addEventListener){
  4. dom.addEventListener(type, fn, false);
  5. }else if(dom.attachEvent){
  6. dom.attachEvent('on'+type, fn);
  7. }else{
  8. dom['on'+type] = fn;
  9. }

通过惰性模式:加载即执行:JavaScript文件加载时通过闭包执行对方法进行重新定义,在页面加载时会消耗一定的资源

  1. var AddEvent = function(dom, type, fn){
  2. if(dom.addEventListener){
  3. return function(dom, type, fn){
  4. dom.addEventListener(type, fn, false);
  5. }
  6. }else if(dom.attachEvent){
  7. return function(dom, type, fn){
  8. dom.attachEvent('on'+type, fn);
  9. }
  10. }else{
  11. return function(dom, type, fn){
  12. dom['on'+type] = fn;
  13. }
  14. }
  15. }();

  

JS 闭包应用的更多相关文章

  1. js闭包的作用域以及闭包案列的介绍:

    转载▼ 标签: it   js闭包的作用域以及闭包案列的介绍:   首先我们根据前面的介绍来分析js闭包有什么作用,他会给我们编程带来什么好处? 闭包是为了更方便我们在处理js函数的时候会遇到以下的几 ...

  2. 大部分人都会做错的经典JS闭包面试题

    由工作中演变而来的面试题 这是一个我工作当中的遇到的一个问题,似乎很有趣,就当做了一道题去面试,发现几乎没人能全部答对并说出原因,遂拿出来聊一聊吧. 先看题目代码: function fun(n,o) ...

  3. Js闭包常见三种用法

        Js闭包特性源于内部函数可以将外部函数的活动对象保存在自己的作用域链上,所以使内部函数的可以将外部函数的活动对象占为己有,可以在外部函数销毁时依然存有外部函数内的活动对象内容,这样做的好处是可 ...

  4. js闭包之初步理解( JavaScript closure)

    闭包一直是js中一个比较难于理解的东西,而平时用途又非常多,因此不得不对闭包进行必要的理解,现在来说说我对js闭包的理解. 要理解闭包,肯定是要先了解js的一个重要特性, 回想一下,那就是函数作用域, ...

  5. (原创)JS闭包看代码理解

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  6. js闭包理解

    js闭包的作用是使函数外可以访问函数内部的变量,是通过 在函数内部 定义 访问函数内变量 的函数实现的,内部的一个函数产生一个闭包 function a() { var i=0; return fun ...

  7. js闭包理解实例小结

    Js闭包 闭包前要了解的知识  1. 函数作用域 (1).Js语言特殊之处在于函数内部可以直接读取全局变量 <script type="text/javascript"> ...

  8. Js闭包的用途

    本来想总结一点JavaScript中的闭包的一些用法,在查资料的时候发现了一篇很好的文章,就转过来收藏了,下面附上传送门: js闭包的用途 ---------sunlylorn 我们来看看闭包的用途. ...

  9. js闭包和ie内存泄露原理

    也议 js闭包和ie内存泄露原理 可以, 但小心使用. 闭包也许是 JS 中最有用的特性了. 有一份比较好的介绍闭包原理的文档. 有一点需要牢记, 闭包保留了一个指向它封闭作用域的指针, 所以, 在给 ...

  10. js闭包(closure),个人理解

    一.闭包概念理解 各种专业文献上对js"闭包"(closure)定义非常抽象,贼难看懂.我的理解是,闭包就是能够读取某函数内部变量的函数.由于在Javascript语言中只有在函数 ...

随机推荐

  1. git 分回滚后无法合并代码问题

    git reset & git revert 区别: 1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit. 2. 在回滚 ...

  2. 《JAVA多线程编程核心技术》 笔记:第一章

    一.基本概念理解:1.1.进程和线程的理解1.2.同步和异步的理解(阻塞模式和非阻塞模式)1.3 线程间共享变量和不共享变量二.多线程的实现方式和构造方法:2.1 实现方式:2个2.2 构造方法:8个 ...

  3. sql---字段类型转换,sql获取当前时间

    一.字段类型转换 convert(要转换成的数据类型,字段名称)例如 convert(varchar(100),col_name)Convert(int,Order_no) 二.sql获取当前时间 s ...

  4. Oracle数据库的归档模式(archivelog mode)

    Oracle数据库可以运行在2种模式下: 归档模式(archivelog) 归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,归档模式应该和相应的备份策略相结合,只有归档模 ...

  5. 修改/etc/hosts 云服务器 没有做外网转内网的优化

    [root@a mapReduceLog]# scp /data/visitlog/* root@d:/data/mapReduceVisitorLog/a/root@d's password:vis ...

  6. ubuntu/debian gpg error no_pubkey 解决方法

    GPG error: http://ppa.launchpad.net precise Release: The following signatures couldn’t be verified b ...

  7. Windows服务的调试

    1.服务为其他程序调用的情况:首先停止服务,在项目中设置断点,重新启动服务,点击项目中工具,附加到进程,运行调用服务的程序,即可进入之前设置的断点,进而进行调试. 2.服务内方法为自动执行的情况:首先 ...

  8. 如何实现redis集群?

    由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法 ...

  9. Win10 jdk的安装以及环境变量的配置,及需要注意的坑

    此篇文章献给自己,希望下次长点记性 最近本人终于有时间开始学习appium,并且开始在电脑上配置环境,第一步就是在我那刚装的Win10 系统上安装jdk,过程并不顺利,由于之前都是用的win7,几乎都 ...

  10. Java线程安全和非线程安全

    ArrayList是非线程安全的,Vector是线程安全的:HashMap是非线程安全的,HashTable是线程安全的:StringBuilder是非线程安全的,StringBuffer是线程安全的 ...