0
点赞
收藏
分享

微信扫一扫

JavaScript -- 闭包及应用

前言

本文主要记录了闭包的定义、使用形式以及闭包的应用。

闭包的定义

闭包是涉及独立变量的函数,在闭包中定义的函数会记住它所在环境中的变量

闭包的使用形式

闭包常见的使用的形式有两种:函数作为返回值,函数作为参数。

函数作为返回值

在这里插入图片描述

函数作为参数

在这里插入图片描述

闭包的优缺点

优点

  • 变量长期驻扎在内存中;
  • 避免全局变量的污染
  • 模拟私有成员 ;

缺点

  • 会造成内存泄露

闭包的应用

闭包常见的应用有私有变量、柯里化以及偏函数。

私有成员

在这里插入图片描述

        function _data (){
            // data中的数据被隐藏,不能被外界访问
            const data = {}
            return {
                set: function (key, val){
                    data[key] = val;
                },
                get: function (key){
                    return data[key];
                }
            }
        }
        const a = _data();
        a.set('name', '张三');
        console.log(a.get('name'));

柯里化

柯里化(Currying)是把接受多个参数的函数变换成一系列接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。

在这里插入图片描述

        // 未柯里化
        function add(a, b){
            return a + b;
        }
        // 柯里化
        function newAdd(a, b){
            return function (b){
                return a + b;
            };
        }
        console.log(add(1,2), newAdd(1)(2));

偏函数

偏函数和柯里化类似,柯里化是将n个参数的函数转换成嵌套的一次只传一个参数的n个函数,偏函数比较宽松,不强调单函数,它的目标是将函数入参进行拆解。

在这里插入图片描述

        function add(a, b, c){
            return a + b + c;
        }
        // 偏函数
        function newAdd(a, b){
            return function (b, c){
                return a + b + c;
            };
        }
        console.log(add(1, 2, 3), newAdd(1)(2, 3));

本文到此结束

如果大家还有什么其他想法,欢迎在评论区交流!

举报

相关推荐

0 条评论