zoukankan      html  css  js  c++  java
  • 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、在提供的方法中,我们可以设置一些校验逻辑,让数据变得更加安全

  • 相关阅读:
    19.1.30 [LeetCode 24] Swap Nodes in Pairs
    19.1.29 [LeetCode 23] Merge k Sorted Lists
    06_Python异常处理机制
    05_Python的文件操作
    04_Python中的35个关键字
    03_Python基础语法
    02_Python开发环境使用和PDB调试
    01_Python基础知识梳理
    socket post
    python_socket_cmd
  • 原文地址:https://www.cnblogs.com/wuqiuxue/p/8341538.html
Copyright © 2011-2022 走看看