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

JS -- 闭包

时间:2015-08-09 20:32:23      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

JS – 闭包

JS – 闭包

闭包例子

function createFunction() {
    val local = 100;
    return function() { 
        return local; 
    };
}

为什么这是闭包?
local 这个 局部变量可达 的, 就会尽力保存局部变量, c 语言做不到这样

function f1() {
    var a = 20;
    function f2() {
        alert(a);
    }
    return f2;
}
var a = 99;
var f = f1();
f();                            // 20

在 c 语言中, f1 内的局部变量在 f1 函数执行完后就会被弹出栈
在 js 中, f1 执行过程, 生成了 f2, 而从作用域上, f2 能访问到 a 这个变量, 于是返回的函数形成一个 环境包, 这个环境包属于 f2, 外部不能访问所以叫闭包

闭包计数器

var cnt = (function () {
    var cnt = 0;
    return function () {
        return ++cnt;
    }
})();
alert(cnt());
alert(cnt());
alert(cnt());
$ = {};
$.cnt = (function () {
    var cnt = 0;
    return function () {
        return ++cnt;
    }
}());
alert($.cnt());
alert($.cnt());
alert($.cnt());

闭包的作用和缺点

  1. 局部变量保存在内存中, 不让垃圾回收机制将其收回
  2. 让外部去访问内部函数的局部变量

缺点:
闭包使用太多, 内存消耗太大

TODO 待解决

var arr = new Array();
for (var i = 0; i < 4; i++) {
    arr.push(function(i) {alert(i);});
}
arr[0]();
arr[3]();

JS -- 闭包

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4716169.html

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