JS高级——闭包

基本概念

1、字面意思就是封闭包裹:一个具有封闭的对外不公开的, 包裹结构, 或空间

2、js中的闭包就是函数

3、闭包的原理就是作用域访问原则:上级作用域无法直接访问下级作用域中的变量

4、闭包要解决的问题:闭包内的数据不允许外界访问,要解决的问题就是间接访问该数据

闭包基本模式

1、在外部函数(foo)内创建函数(inner),在这个内部函数(inner)中,可以操作foo中的数据

2、将内部函数作为外部函数的返回值进行整体返回

3、在外部调用外部函数(foo),就可以接受到返回值(内部函数)

4、使用这个内部函数,就可以在外部对外部函数里的变量进行修改

<script>
    function foo() {
        var num = 123;
        return function (a) {
            //1.如果传参数,这里的a肯定不是Undefined,所以条件判断为true
            if (a !== undefined) {
                num = a;
            } else {
                //如果不传参,代表要获取这个值,直接return
                return num;
            }
        };
    }

    var func = foo();
    //设置值
    func(789);
</script>

闭包设置以及获取值

<script>
    function foo() {
        var name = "高金彪";
        var gender = "female";

        return {

            getName: function () {
                return name;
            },
            setName: function (value) {
                name = value;
                return name;
            },
            setGender: function (value) {
                gender = value;
                //return gender;
            },
            getGender: function () {
                return gender;
            }

        };
    }

    var obj = foo();
    console.log(obj.getGender());
    console.log(obj.setGender(""));
    console.log(obj.getGender());
</script>

闭包的作用

1、最基本的作用:可以通过闭包返回的函数或者方法,来修改函数内部的数据

2、创建一个私有的空间,保护数据

3、外部想要访问数据,只能通过函数提供的方法

4、在提供的方法中,我们可以设置一些校验逻辑,让数据变得更加安全

 

posted @ 2018-01-24 14:39  var_obj  阅读(224)  评论(0编辑  收藏  举报