`

js 闭包的使用

 
阅读更多

 

 

1 初始化dom元素 ,在页面加载的时候只执行一次,不在被调用 

 

var datamodel = {
	    table : [],    
	    tree : {}    
};
	

(function(dm){
	alert("22222222222");
    for(var i = 0; i < dm.table.rows; i++){
       var row = dm.table.rows[i];    
       for(var j = 0; j < row.cells; i++){    
          // drawCell(i, j);    
       }    
    }    
       
    //build dm.tree      
})(datamodel); 

 2 闭包不释放引用,函数内部的值可以保留 

  例子:缓存数据,数据存在从缓存中取,不存在则创建放到缓存中 

 

var CachedSearchBox = (function(){  
    var cache = {},    
        count = [];    
    return { 
       attachSearchBox : function(dsid){    
           if(dsid in cache){//如果结果在缓存中    
              return cache[dsid];//直接返回缓存中的对象    
           }    
          // var fsb = new uikit.webctrl.SearchBox(dsid);//新建    
           cache[dsid] = dsid+"测试";//更新缓存    
           if(count.length > 100){//保正缓存的大小<=100    
              delete cache[count.shift()];    
           }    
           return cache[dsid];          
       },    
     
       clearSearchBox : function(dsid){    
           if(dsid in cache){    
              cache[dsid].clearSelection();      
           }    
       }    
    };    
})();    
     
var result = CachedSearchBox.attachSearchBox("input22");   
alert(result);

 3 封装,因为闭包结果又引用,引用中用到了闭包中的变量,使得闭包变量得以长久保存 

   这个例子实现了对name这个变量的封装,只能依靠方法来访问。

var person = function(){    
    //变量作用域为函数内部,外部无法访问    
    var name = "default";       
       
    return {    
       getName : function(){    
           return name;    
       },    
       setName : function(newName){    
           name = newName;    
       }    
    }    
}();    

console.log(person.name);//直接访问,结果为undefined    
console.log(person.getName());    
person.setName("abruzzi");    
console.log(person.getName());    
   

 4 闭包实现面向对象,不同对象有不同的变量与状态 

   原理:1 中的闭包,是一个匿名函数,只被调用一次, 而 2中的闭包把匿名函数给一个变量引用,使得内部状态可以常驻内存  

            在4中则闭包创建为一个有名称的函数,每次调用则可以创建单独的闭包变量,则可以创建多个 ,每一个可以看成一个对象 。 

   

function Person(){    
    var name = "default";       
       
    return {    
       getName : function(){    
           return name;    
       },    
       setName : function(newName){    
           name = newName;    
       }    
    }    
};    
     
     
var john = Person();    
console.log(john.getName());    
john.setName("john");    
console.log(john.getName());    
     
var jack = Person();    
console.log(jack.getName());    
jack.setName("jack");    
console.log(jack.getName());    
   

 

 

 

 

 

分享到:
评论

相关推荐

    JS闭包可被利用的常见场景

    JS闭包可被利用的常见场景。值得保留的文档。值得一看

    Javascript 闭包完整解释

    Javascript 闭包完整解释

    js闭包详细讲解

    js闭包的详细讲解

    js闭包个人理解

    js闭包的个人理解

    js闭包写法学习demo

    js闭包写法学习demo

    JavaScript闭包

    Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态...本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。

    尚硅谷——JavaScript闭包

    JavaScript闭包 JavaScript闭包 JavaScript闭包 JavaScript闭包

    js闭包理解之倒计时

    网上大多只是讲解js闭包的大概意思和小例子,但真实用于项目中又该怎么用呢。这个例子真实的告诉大家在项目中的用法

    JavaScript闭包函数

    闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...

    【JavaScript源代码】js闭包和垃圾回收机制示例详解.docx

    js闭包和垃圾回收机制示例详解  目录 前言 正文  1.闭包  1.1闭包是什么?  1.2闭包的特性 1.3理解闭包  1.4闭包的主要实现形式  1.5闭包的优缺点  1.6闭包的使用  2.垃圾回收机制 总结  前言  正文  ...

    JS闭包经典

    闭包一点即通 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    js闭包的理解以及作用.docx

    JS闭包理解 什么是闭包? 当有一个函数想要访问另一个函数内部的变量,这个是访问不了的。所有我们要用闭包来访问。所以简单的来说,闭包就是连接函数内部和外部的一座桥梁,通过闭包我们能够访问其他函数内部的...

    javascript 闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    layer.rar 使用js 闭包封装的原生提示模态框

    该工具类为一个使用js 闭包封装的一个提示模态框,使用于不同分辨率的设备包括pc

    javascript闭包详解中文word版

    资源名称:javascript闭包详解 中文word版   内容简介: Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C 的程序员来说是一个新的...

    js闭包学习

    javaScript无可争议的是如今前台开发最常用的技术,该文档讲解了javaScript中闭包技术,在jquery中大量的使用了该技术,学好可以更好的理解学习jquery。

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    JavaScript闭包函数访问外部变量的方法

    闭包是指有权访问另一个函数作用域中的变量的函数,但作用域的配置机制有一个需要注意的地方,即闭包只能取得包含函数中任何变量的最后一个值。 如以下案例: function create(){  var arr = new Array();     ...

    javascript闭包的高级使用方法实例

    介绍了javascript闭包的高级使用方法实例,有需要的朋友可以参考一下

    JS中的闭包理解。。。。。。。。

    js闭包 • 每个函数都有一个包含词法环境的执行上下文,它的词法环境确定了函数内的变量赋值以及对外部环境的引用。看上去函数“记住”了外部环境,但其实上是这个函数有个指向外部环境的引用。这就是“闭包”的...

Global site tag (gtag.js) - Google Analytics