js 闭包
Posted 万事开头难
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 闭包相关的知识,希望对你有一定的参考价值。
js闭包网站:http://www.cnblogs.com/qieguo/p/5457040.html
什么是js闭包
有权访问另一个函数作用域内变量的函数都是闭包。
这里 f 函数访问了构造函数 a 里面的变量 n,所以形成了一个闭包。再来看一段代码
1 function a() { 2 var n = 0; 3 function f() { 4 n++; 5 console.log(n); 6 } 7 return f; 8 } 9 10 var c = a(); 11 c(); //控制台输出1 12 c(); //控制台输出2
看看是怎么执行的:
var c = couter(),这一句 couter()返回的是函数 inc,那这句等同于 var c = f;
c(),这一句等同于 f(); 注意,函数名只是一个标识(指向函数的指针),而()才是执行函数。
后面三句翻译过来就是: var c = f; f(); f();,跟第一段代码有区别吗? 没有。
为啥要那样写?
我们知道,js的每个函数都是一个个小黑屋,它可以获取外界信息,但是外界却无法直接看到里面的内容。将变量 n 放进小黑屋里,除了 f 函数之外,没有其他办法能接触到变量 n,而且在函数 a 外定义同名的变量 n 也是互不影响的,这就是所谓的增强“封装性”。
而之所以要用 return 返回函数标识 f,是因为在 a 函数外部无法直接调用 f 函数,所以 return f与外部联系起来。
js闭包的用途
http://blog.csdn.net/sunlylorn/article/details/6534610
我们来看看闭包的用途。事实上,通过使用闭包,我们可以做很多事情。比如模拟面向对象的代码风格;更优雅,更简洁的表达出代码;在某些方面提升代码的执行效率。
1 匿名自执行函数
2缓存
3 实现封装
4 闭包的另一个重要用途是实现面向对象中的对象,传统的对象语言都提供类的模板机制,
以上是关于js 闭包的主要内容,如果未能解决你的问题,请参考以下文章