闭包
来源:互联网 发布:富贵鸡源码 编辑:程序博客网 时间:2024/06/05 17:23
闭包
内层函数引用外层函数的变量a,使得a一直存在,又可以避免全局污染
for(var i = 0, len = nodes.length;i < len;i++){ (function(i) { nodes[i].onclick = function () { console.log(i); } })(i) }
//判断是否是数组 Type = {}; for(var i = 0,type;type = ['String','Array','Number'][i++];){ (function(type) { Type['is'+type] = function (obj) { return Object.prototype.toString.call(obj) === '[object '+ type +']'; } })(type) } Type.isArray([]);//ture
闭包的作用
1.封装变量,加入缓存机制
var mult = (function () { var cache = {}; var calculate = function () { var a = 1; for (var i = 0, l = arguments.length; i < l; i++) { a = a * arguments[i]; } return a; } return function () { var args = Array.prototype.join.call(arguments,','); if(args in cache){ return cache[args]; } return cache[ args ] = calculate.apply(null,arguments) } })() alert( mult( 1,2,3 ) )
2.延续局部变量寿命
var report = (function () { var imgs = [] return function ( src ) { var img = new Image() imgs.push( img ) img.src = src; } })()
3.用闭包实现命令模式命令模式的意图是把请求封装为对象,从而分离请求的发起者和请求的接受(执行)者之间的耦合关系。在命令被执行之前,可以预先往命令对象中植入命令的接受者。
var TV = { open: function () { console.log("打开电视机") }, close: function () { console.log("打开电视机") } } var createCommand = function ( receiver ) { var execute = function () { return receiver.open() } var undo = function () { return receiver.close() } return { execute: execute, undo: undo } } var setCommand = function ( command ) { document.getElementsById('execute').onclick = function () { command.execute()//打开电视机 } document.getElementsById('undo').onclick = function () { command.undo()//关闭电视机 } } setCommand( createCommand( TV ) )
4. 闭包的内存管理循环引用会导致内存泄漏,将变量置为null,避免内存泄漏。
阅读全文
0 0
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 直接从别人那拷的myeclipse,到自己电脑上不能直接用
- 如何从移动硬盘中分出一个区做启动盘
- Spring系列——RESTful的web项目
- OpenCV结合V4l2实现人脸检测
- struts1配置文件中action常用的属性
- 闭包
- Cocos2d-x 3.2 的内存管理详解
- 一个带时间的相册页面(仿小米相册)
- 【Autograd】深入理解BP与自动求导
- Two Sum
- LeetCode231 判断是否为2的幂
- CLIENT_PLUGIN_AUTH is required
- linux 中的指针
- iOS11&iPhoneX适配&Xcode9打包注意事项