You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将匿名函数作为参数传入时会被当作字符串处理?

问题原因

你遇到的核心问题是:你传递的是函数本身,而没有执行它来获取返回值。

在JavaScript中,当你把函数直接作为参数传入另一个函数时,如果没有主动调用它(加()),目标函数的参数接收的是整个函数对象。当你执行str += letter时,JavaScript会自动把函数对象转换为它的字符串表示形式(也就是你看到的那段函数代码),再和"a"拼接,所以才得到了那个奇怪的结果。

修正方案

有两种解决方式,第二种更贴合你练习“函数作为参数传递”的初衷:

方式1:传递参数时立即执行函数

直接在传入的函数后面加(),让它执行并返回"pizz":

function appendLetterToString(letter, str) {
    return str += letter
}

let pizza = appendLetterToString("a", (function(){
    return "pizz";
})())

console.log(pizza); // 输出 'pizza'

方式2:在目标函数内部调用传入的函数

这种方式才是真正将函数作为参数使用(和你参考的map示例逻辑一致),在appendLetterToString内部调用传入的函数,获取它的返回值再进行拼接:

function appendLetterToString(letter, getStringFunc) {
    // 调用传入的函数,拿到它返回的字符串
    const originalStr = getStringFunc();
    return originalStr += letter;
}

let pizza = appendLetterToString("a", function(){
    return "pizz";
})

console.log(pizza); // 输出 'pizza'
和你参考的map示例对比

你参考的map示例中,map方法内部会自动遍历数组,并且主动调用你传入的回调函数,把数组的每个元素作为参数传给它,所以你不需要手动调用那个函数。而你自己写的appendLetterToString没有这个逻辑,所以需要你自己处理函数的调用。

内容的提问来源于stack exchange,提问作者codenoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:13:23