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;
          }
      }
    }();
    

      

  • 相关阅读:
    [BZOJ3398] [Usaco2009 Feb]Bullcow 牡牛和牝牛(动态规划)
    [BZOJ3399] [Usaco2009 Mar]Sand Castle城堡(排序)
    [VIJOS1003] 等价表达式(表达式解析)
    [BZOJ4690] Never Wait for Weights(并查集)
    sql server 查出数据库表结构
    sql server 时间日期转换
    LINQ语法详解
    方法练习题
    数组练习题
    第四章 JAVA数组知识点
  • 原文地址:https://www.cnblogs.com/hankuikui/p/6606284.html
Copyright © 2011-2022 走看看