JavaScript 闭包
来源:互联网 发布:澳门大学 知乎 编辑:程序博客网 时间:2024/05/26 08:41
什么是闭包?
在一个函数里面嵌套另外一个函数。嵌套(nest)(内部, inner)函数是容器(containing)(外部, outer)函数的私有成员。它自身也形成了一个闭包(closure)。一个闭包是一个可以自己拥有独立的环境与变量的表达式(通常是函数)。闭包就是携带状态的函数,并且它的状态可以完全对外隐藏起来。
- 内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了;
- 在没有class机制,只有函数的语言里,借助闭包,同样可封装私有变量;
- 内部函数只可以在外部函数中访问(不是任意地方);
- 内部函数形成了一个闭包:它可以访问外部函数的参数和变量,但是外部函数却不能使用它的参数和变量.
如何使用闭包?
示例一:闭包保存参数
function outside(x) { function inside(y) { return x + y; } return inside; //返回的是个闭包函数}//先给闭包函数赋值,再调用fn_inside = outside(3); result = fn_inside(5); // returns 8//同时指定外部和内部函数的参数,再调用result1 = outside(3)(5); // returns 8
注意:一个闭包必须保存它可见作用域中所有的参数和变量。因为每一次调用传入的参数都可能不同,每一次对外部函数的调用都实际上重新创建了一遍这个闭包(函数)。例如:
示例二:改变闭包参数,创造新函数
function make_pow(n) { return function (x) { return Math.pow(x, n); }}// 创建两个新函数: 闭包会当做private变量一样保存自身的参数,相当于返回的新函数是因为内部(闭包)参数不同导致的。var pow2 = make_pow(2);var pow3 = make_pow(3);pow2(5); // 25pow3(7); // 343
示例三:域链(scope chaining): 更近的作用域有更高的优先权;递归内部包含外部所有作用域.
function A(x) { function B(y) { function C(z) { console.log(x + y + z); } C(3); } B(2);}A(1); // 控制台输出 6 (1 + 2 + 3)/* - B形成了一个包含A的闭包,B可以访问A的参数和变量 - C形成了一个包含B的闭包 - B包含A,所以C也包含A,C可以访问B和A的参数和变量。换言之,C用这个顺序链接了B和A的作用域*/
参考资料:
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions
- http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000
0 0
- 【JavaScript】Javascript闭包
- javascript的闭包javascript
- Javascript闭包演示javascript
- [ javascript ] javascript闭包测试!
- 【javascript】javascript中的闭包
- 【javascript】学习Javascript闭包
- 理解 JavaScript 闭包
- javascript 闭包
- javascript闭包
- Javascript闭包
- JavaScript中的"闭包"
- JavaScript 闭包
- javascript中的闭包
- 理解 JavaScript 闭包
- Javascript Closures[闭包]
- javascript闭包
- Javascript 闭包详解
- Javascript闭包技术
- 快速出现品牌关键词在百度360下拉框中进行推广
- python入门学习教程之List(列表)
- 匈牙利算法-二分图的最大匹配
- 并查集
- 大神教你如何安装win7系统
- JavaScript 闭包
- PostgreSQL 与基友们的故事之 - Redis (无限缓存,实时标签...)
- App服务端架构变迁
- 如何搭建testlink工具管理测试用例等
- 循环处理目录
- 应用层之DNS域名系统
- 如何在VirtualBox虚拟机上安装win7系统
- 配置maven环境并在eclipse中搭建第一个maven工程
- pgmemcache installation