js 闭包实例

var db = (function() {
// 创建一个隐藏的object, 这个object持有一些数据
// 从外部是不能访问这个object的
var data = {};
// 创建一个函数, 这个函数提供一些访问data的数据的方法
return function(key, val) {
    if (val === undefined) { return data[key] } // get
    else { return data[key] = val } // set
    }
// 我们可以调用这个匿名方法
// 返回这个内部函数,它是一个闭包
})();

db('x'); // 返回 undefined
db('x', 1); // 设置data['x']为1
db('x'); // 返回 1
// 我们不可能访问data这个object本身
// 但是我们可以设置它的成员

1.当function里嵌套function时,内部的function可以访问外部function里的变量。

 

2. 外部变量(环境变量?),

包括:

  2.1 全局变量,包括DOM。

  2.2 外部函数的变量或函数。

如果一个函数访问了它的外部变量,那么它就是一个闭包。

从技术上来讲,在JS中,每个function都是闭包,因为它总是能访问在它外部定义的数据。

 

 

 

没return的闭包:

 function closureExample() {
            var temp = 10;
            setTimeout(function () {
                console.log(++temp);
            }, 1000);
        }
        closureExample()

闭包实例:

  function demo() {
            var temp = 5;
            function add() {
                console.log(temp++);
            }
            return add;
        }
        var demeInstance = demo();
        //console中调demeInstance,temp就一直加

 

posted @ 2017-09-01 18:09  小小高  阅读(226)  评论(0编辑  收藏  举报