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 闭包的主要内容,如果未能解决你的问题,请参考以下文章

JS闭包的概念

(原创)JS闭包看代码理解

关于JS闭包

js闭包的作用

js闭包

js的闭包