初识javascript闭包

来源:互联网 发布:loadrunner12 java 编辑:程序博客网 时间:2024/06/07 21:33

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
原创粉丝点击