码迷,mamicode.com
首页 > Web开发 > 详细

js 闭包

时间:2016-12-11 18:15:58      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:mil   lin   js闭包   调用   js 闭包   details   定义   nbsp   net   

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 闭包

标签:mil   lin   js闭包   调用   js 闭包   details   定义   nbsp   net   

原文地址:http://www.cnblogs.com/spore/p/6159931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!