初识javascript闭包

1.什么是闭包

一个具有封闭的对外不公开的,包裹结构,或空间,js中的闭包就是函数。

2.闭包原理

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

3.闭包要解决什么问题?

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

4. 使用闭包获取多个数据

  function foo(){
        var name = '张国荣';
        var age = 18;
        return function(){
            return name + ":" + age;
        }
    }
    var getName = foo();
    console.log(getName());

或者返回数组形式:

    function foo(){
        var name = '张国荣';
        var age = 18;
        return [
        function(){
            return name;
        },
        function(){
            return age;
        }
        ]
    }
    var getName = foo();
    console.log(getName[0]());
    console.log(getName[1]());

或者使用对象获取:

    function foo(){
        var name = '张国荣';
        var age = 18;
        return {
            getName:function(){
                return name;
            },
            getAge:function(){
                return age;
            }
        }
    }
    var obj = foo();
    console.log(obj.getName());
    console.log(obj.getAge());

5.使用对象返回多个方法来获取并设置值

function foo(){
        var name = 'hehe';
        var gender = 'male';
        return {
            getName:function(){
                return name;
            },
            setName:function(value){
                name = value;
                return name;
            },
            getGender:function(){
                return gender;
            },
            setSpeed:function(value){
                speed = value;
                return speed;
            }
        }
    }
    var obj = foo();
    console.log(obj.getName());
    console.log(obj.getGender());
    obj.setName("xixi");
    console.log(obj.getName());

6.闭包的作用

作用:
1 可以通过闭包返回的函数或者方法,来修改函数内部的数据
2 创建一个私有的空间,保护数据
3 外部想要访问数据,只能通过函数提供的方法
4 在提供的方法中,我们可以设置一些校验逻辑,让数据变得更加安全

function foo(){
            var name = "潘明";
            var badLevel = -1000000000000000000000000000000000;
            return {
                getName: function () {
                    return name;
                },
                setName: function (value) {
                    name = value;
                    return name;
                },
                getBadLevel:function(){
                    return badLevel;
                },
                setBadLevel:function (value) {
                    //在函数外部想要修改数据
                    //只能通过函数内部的方法
                    //我们可以在函数内部定义的这个方法里
                    //设置安全措施,校验之类的操作
                    //可以保证系统的安全性和稳定性
                    if(value > 0 ){
                        throw "你敢说我坏!!!";
                    }

                    badLevel = value;
                    return badLevel;
                }
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值