zoukankan      html  css  js  c++  java
  • 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就一直加
  • 相关阅读:
    centos6系列更换阿里yum源
    javascript字符串方法学习汇总
    ORA-01439:要更改数据类型,则要修改的列必须为空
    Python之字典
    Python之元组
    Python之列表
    Tensorflow 快速学习
    Ubuntu 切换到root 授权失败
    受限玻尔兹曼机二
    Numpy 数组ndarray和常用函数速查
  • 原文地址:https://www.cnblogs.com/gaocong/p/7464512.html
Copyright © 2011-2022 走看看