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闭包可被利用的常见场景。值得保留的文档。值得一看
Javascript 闭包完整解释
js闭包的详细讲解
js闭包的个人理解
js闭包写法学习demo
Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态...本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。
JavaScript闭包 JavaScript闭包 JavaScript闭包 JavaScript闭包
网上大多只是讲解js闭包的大概意思和小例子,但真实用于项目中又该怎么用呢。这个例子真实的告诉大家在项目中的用法
闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...
js闭包和垃圾回收机制示例详解 目录 前言 正文 1.闭包 1.1闭包是什么? 1.2闭包的特性 1.3理解闭包 1.4闭包的主要实现形式 1.5闭包的优缺点 1.6闭包的使用 2.垃圾回收机制 总结 前言 正文 ...
闭包一点即通 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
JS闭包理解 什么是闭包? 当有一个函数想要访问另一个函数内部的变量,这个是访问不了的。所有我们要用闭包来访问。所以简单的来说,闭包就是连接函数内部和外部的一座桥梁,通过闭包我们能够访问其他函数内部的...
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
该工具类为一个使用js 闭包封装的一个提示模态框,使用于不同分辨率的设备包括pc
资源名称:javascript闭包详解 中文word版 内容简介: Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C 的程序员来说是一个新的...
javaScript无可争议的是如今前台开发最常用的技术,该文档讲解了javaScript中闭包技术,在jquery中大量的使用了该技术,学好可以更好的理解学习jquery。
深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系
闭包是指有权访问另一个函数作用域中的变量的函数,但作用域的配置机制有一个需要注意的地方,即闭包只能取得包含函数中任何变量的最后一个值。 如以下案例: function create(){ var arr = new Array(); ...
介绍了javascript闭包的高级使用方法实例,有需要的朋友可以参考一下
js闭包 • 每个函数都有一个包含词法环境的执行上下文,它的词法环境确定了函数内的变量赋值以及对外部环境的引用。看上去函数“记住”了外部环境,但其实上是这个函数有个指向外部环境的引用。这就是“闭包”的...