Midshar.top 2024-03-01 15:19 采纳率: 50%
浏览 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日