文章标题
来源:互联网 发布:恒久软件 义齿 编辑:程序博客网 时间:2024/06/05 04:02
定义
闭包定义(closures):是使用被作用域封闭的变量,函数,闭包等执行的一个函数作用域
闭包是指这样的作用域,它包含有一个函数,这个函数可以调用被这个作用域所封闭的变量、函数或者闭包等内容
js 闭包,在表现形式上来说就是在函数里面再定义一个函数,这个函数的作用域并不是在它定义的这个函数中,而是在全局作用域之内,但是作用域链却可以找到上级函数,获取上级函数之内的内部变量
闭包简单使用场景:
循环闭包
在循环中执行异步操作时,因为执行时循环早已结束,循环体中的变量的值已经固定,所以再引用变量时值是固定不变的
在js中,没有块级作用域,只有函数作用域。可以采用“立即执行函数”的方式创建作用域
for(var i = 0, len = btns.length; i < len; i++) {(function(i) { btns[i].onclick = function() { alert(i); }}(i))
}
封装私有变量
将一些不希望暴露的全局变量封装成私有变量
虽然js不提供原生支持的方法声明私有变量,但是可以使用闭包模拟私有变量和方法。私有方法不仅仅有利于限制对代码的访问,还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱代码的公告接口部分
var num = (function(){ var num = 0; return { set:function(val){ return num = val; }, get:function(){ return num; } }})()
延长局部变量寿命
原理上就是把局部变量发送到全局变量里面,这样就不会在函数一运行完毕就销毁掉,而是强制保存已完成的变量
var report = (function() { var imgs = []; return function(src) { var img = new Image(); imgs.push(img); img.src = src; }}())
性能
闭包会对脚本性能具有负面影响,处理速度和内存消耗,因为闭包的基本作用就是强制保存应该被销毁的函数以及变量,只要局部变量不被销毁,那么这个保有这个变量的函数就不会被销毁,这样子局部变量的内存和函数的栈都在内存中存在
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 7614:最低通行费
- Matlab处理虹膜程序解析
- 静态变量 static
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1011-A Cubic number and A Cubic Number
- C语言下用MySQL对数据库操作
- 文章标题
- 关于数据流问题的学术报告笔记1
- $'\r': 未找到命令的解决办法
- selectOne和selectList
- QGC之QGCView.qml
- Django(五)中间件
- 用kotlin写了一些android常用的一些工具类
- 如何更好处理数据仓库服务必然需要云数据库HybridDBforPostgreSQL
- 用kotlin写的android Log的几乎完美封装