闭包参数的访问
来源:互联网 发布:漫画教程软件下载 编辑:程序博客网 时间:2024/06/06 02:16
闭包函数内的变量是不能访问的
var db = (function(){ var data = {"name":"huangbiao"}; return function(key,val){ if(val === undefined) { return data[key]; } else { return data[key] = val; } }})();//从上面的alert可以看出db实际上是返回的函数,因此里面传递的参数就是对应这//db指针指向function(key,val)的参数//alert(data.name);//data是闭包内的变量,访问不了,浏览器报错//弹出undefinedalert(db('x'));//data={"name":"huangbiao","x":}//弹出1alert(db('x',1));//data={"name":"huangbiao","x":"1"}//弹出1alert(db('x'));//data={"name":"huangbiao","x":"1"}
<script>var MyNamespace={};MyNamespace.Singleton=(function(){var privateAttribute1 = "privateAttribute1";var privateAttribute2 = false;var privateAttribute3 = [1,2,3];function privateMethod1(){alert("privateMethod1");}function privateMethod2(){alert("privateMethod2");}return {publicAttribute1:true,publicAttribute2:"publicAttribute2",publicMethod:function(){alert("publicMethod");alert(privateAttribute1);},publicMethod1:function(){alert("publicMethod1");},publicsetAttr2:function(){//访问的属性是闭包内部的属性,不需要使用this关键字,不同的对象,是相互不受影响的。alert(privateAttribute2);privateAttribute2 = true;},publicgetAttr2:function(){alert(privateAttribute2);}};})();MyNamespace.Singleton.publicMethod();MyNamespace.Singleton.publicsetAttr2();MyNamespace.Singleton.publicgetAttr2();</script>
备注:个人理解闭包:定义一个方法,里面属性和方法外部是不能访问的,因此返回一个对象或者是方法,通过这个对象和方法访问里面的属性或者方法。因此是方法和属性隔离。
所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处:
1、别的函数可能误用这些变量
2、造成全局对象过大,影响访问速度(因为变量的取值是需要从原型链上遍历的)
<script>var MyNamespace={};MyNamespace.Singleton=(function(){abc="ddd";})(); alert(abc);//ddd</script>
闭包的另一个重要用途是实现面向对象中的对象,传统的对象语言都提供类的模板机制,这样不同的对象(类的实例)拥有独立的成员及状态,互不干涉
内存泄露:
在不同的JavaScript解释器实现中,由于解释器本身的缺陷,使用闭包可能造成内存泄露,内存泄露时比较严重的问题,会严重影响浏览器的响应速度,降低用户体验,甚至会造成浏览器无响应等现象。
javascript的解释器都具备垃圾回收机制,一般采用的是引用计数的形式,如果一个对象的引用计数为零,则垃圾回收机制将会将其回收,这个过程是自动的。
例如对象A引用B,B引用C,而C又引用A,这样的情况使得垃圾回收机制得出其引用计数不为零的结论,从而造成内存泄露。
- 闭包参数的访问
- 包的访问权限
- 包的访问权限
- 闭包的返回值和参数
- 闭包的返回值和参数
- 4.4Groovy闭包的多参数
- java-包的访问权限
- 访问内核参数的接口
- struts2 url访问的参数
- 访问servlet的配置参数
- 访问Servlet的配置参数
- [js]关于闭包与访问数组下标的老生常谈
- python的参数管理包
- 不用闭包,不用函数,实现传递"参数"的功能
- setinterval 使用闭包解决参数不能传递的问题
- js 函数的参数 问题 arguments对象 及闭包
- 函数类型做参数和闭包的区别
- 第二十课 包与包之间的访问及访问权限和jar包
- URL添加中文参数乱码解决办法
- 转载:为什么要对URI进行编码
- JS Number对象格式化方法
- js的null undefined学习
- BaseAdapter.notifyDataSetChanged()和.Collections.copy(destination, sour)
- 闭包参数的访问
- js判断操作系统
- Jquery的ready和Dom的onload的区别
- NoSQL之Redis常用命令--服务器相关命令
- JS类型转换
- js void delete + -运算符
- js write()方法学习
- JS无重载
- 视频格式与编码中的理解问题