基本概念
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、在提供的方法中,我们可以设置一些校验逻辑,让数据变得更加安全