闭包

来源:互联网 发布:博客源码手机 编辑:程序博客网 时间:2024/05/29 17:28

闭包

闭包(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();

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

原创粉丝点击