js闭包

来源:互联网 发布:mac pro忘记登录密码 编辑:程序博客网 时间:2024/06/03 18:28

一.闭包定义

闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:
  1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
  2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

简单来说闭包是对能够访问局部变量的函数的引用.

二、为什么需要闭包呢

局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染。

三、特点

  • 占用更多内存
  • 不容易被释放

四、何时使用

既想反复使用,又想避免全局污染


五、闭包的形成条件

(a)一定要执行外层函数返回的function才能形成闭包

(b)内层函数一定要调用外层函数的局部变量

(c)内层函数要最为外层函数的返回值

eg:

(1

function getCounter() { 

    var n = 1; 
    var inner = function () { return n++; }
    return inner;
}
var count=getCounter();
alert(count());
alert(count());

(2)

var test = (function getCounter() {
var n = 5;
return {
inner: function(data) {
if(data > n) {
n++;
return n;
} else {
n--;
return n;
}


}
}
})();
alert(test.inner(9));
alert(test.inner(9));













js中this的指代内容:https://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/index.html