zoukankan      html  css  js  c++  java
  • JS 闭包应用

    1. 代替全局变量

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

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

    // 1)延时函数 
    function fun1(arg){
    return function(){console.dir(arg);}
    }
    var test=fun1('hello');//返回f3的内部函数的引用 setTimeout(test,100); //这里直接传递fun1是不正确的

    // 2)方法注册

    document.getElementById("hello").onclick=test;//正确,

    document.getElementById("hello").attachEvent("onclick",test);//正确,

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

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

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

    var AddEvent = function(dom, type, fn){
      if(dom.addEventListener){
        return function(dom, type, fn){
            dom.addEventListener(type, fn, false);
          }
      }else if(dom.attachEvent){
        return function(dom, type, fn){
            dom.attachEvent('on'+type, fn);
          }
      }else{
        return function(dom, type, fn){
            dom['on'+type] = fn;
          }
      }
    }();
    

      

  • 相关阅读:
    java自带线程池
    SQL 语句学习
    Eclipse 运行内存不足情况
    Eclipse的ant调用maven
    Elipse 无法启动问题(转)
    UI自动化测试实战之Select类实战(四)
    WebElement类方法实战(三)
    WebDriver浏览器属性详解(二)
    服务端测试之gRPC协议测试(一)
    服务端测试实战(一)
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6606284.html
Copyright © 2011-2022 走看看