闭包

闭包

闭包(closure):

它是一个外来词,没有对应的中文含义.你可以认为这个词是创造出来的.
所以关于它的绝大部分解释,都比较生硬难懂.

    function aa() {
        return function () {
            console.log('这个返回的匿名函数,就是闭包');
        }
    }
    aa()();//这个返回的匿名函数,就是闭包

本例中,右侧这个括号,运行的就是return回来的那个匿名函数.

简单的讲闭包就是,”函数套函数”.父函数里面的子函数,就是闭包.”
闭包,是一个作用域.

//==============================================================

    function bb() {
        console.log('这个bb函数,它就是一个闭包');
    }
    bb();//这个bb函数,它就是一个闭包

闭包的特性:
- 函数内部可以读取全局变量;
- 函数外部不能读取函数内部的变量;

这其实就是变量作用域.

//==============================================================

函数内部可以读取全局变量;

    var a1 = 999;
    function aa() {
        console.log(a1);
    }
    aa();//999

//==============================================================

函数外部不能读取函数内部定义的变量

    function aa() {
        var a33 = 999;
    }
    console.log(a33);//(报错)a33 is not defined
    aa();

//==============================================================

父函数aa不能读取子函数bb的变量

    function aa() {
        var a1 = 999;
        console.log(b1);

        function bb() {
            var b1 = 888;
            console.log('这个返回的匿名函数,就是闭包.')
        }
    }
    aa();//(报错)b1 is not defined

//==============================================================

父函数读取子函数里面的变量,要使用return

    function aa() {
        var aa1 = 999;//私有变量
        function bb() {
            console.log(aa1);
        }

        return bb;
    }
    var xx = aa();
    xx();

//==============================================================

闭包的用途之一,用来定义”私有方法”和”私有变量”.

这种私有的方法和变量,在外部无法访问.

//==============================================================
下面是一个对象,它同时也是一个函数,当添加了prototype的时候,他也是构造器,它有一个私有方法get,用来访问它自己内部的变量XX

    function obj() {
        var xx = 1;

        function get() {
            console.log(xx);//1
        }

        this.get = get;
    }
    obj.prototype = {
        a: function () {
            console.log('asaa');//asaa
        }
    }
    var xx = new obj();
    xx.get();
    xx.a();

简单的讲,上面这些就是闭包的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值