Midshar.top 2024-03-01 15:19 采纳率: 66.7%
浏览 2
已结题

在复杂函数调用中的问题


//让数组中的每个数值元素自增1
    function map(arr, ...arg) {//自定义 map 函数,传入一个数组,传入一个方法,将会把数组按照该方法映射为新数组
        let res = arr.map(...arg)
        console.log(res)**//这里能够正常打印结果**
        return res
    }
    function mapper(fun) {
        return function (arr) {
            map(arr, fun)//调用上述自定义 map 函数
        }
    }
    let addOne = x => x + 1
    let newArray = [2, 2, 2, 2, 2]
    console.log(mapper(addOne)(newArray))**//这里打印出来结果是 undefined**

如上,有老师知道吗?为什么我在最后调用函数时在控制台打印出的结果是 undefined ?而我在 map 函数体中却能够正常打印出结果?

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-01 15:20
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,mapper 函数没有返回值。当您调用 mapper(addOne)(newArray) 时,虽然内部的 map(arr, fun) 执行了,并且在 map 函数体内打印出了结果,但 mapper 函数在其闭包内并未显式地返回 map 的结果。

    为了修复这个问题,您需要在 mapper 函数内部返回 map 函数的结果:

    function mapper(fun) {
        return function (arr) {
            // 在这里添加 return 关键字以返回 map 函数处理后的数组
            return map(arr, fun);
        }
    }
    

    修复后的完整代码如下:

    // 自定义 map 函数,传入一个数组和一个方法,将会把数组按照该方法映射为新数组
    function map(arr, ...arg) {
        let res = arr.map(...arg);
        console.log(res); // 这里能够正常打印结果
        return res;
    }
    
    // 修改 mapper 函数,使其返回 map 函数处理后的数组
    function mapper(fun) {
        return function (arr) {
            return map(arr, fun); // 添加 return 语句
        }
    }
    
    let addOne = x => x + 1;
    let newArray = [2, 2, 2, 2, 2];
    
    console.log(mapper(addOne)(newArray)); // 现在这里也应该能打印出正确的结果
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥15 clion的参数提示怎么关闭
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀
  • ¥15 mifare plus卡认证