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

如何定义myMethod.done使其运行时以相同参数调用传入的回调

解决方案

你的核心问题在于:回调函数里的x和y是局部参数,会遮蔽外层作用域的同名变量;同时myMethod.done无法直接访问someOuter函数内的局部变量,必须通过合理的方式传递参数或调整回调逻辑。

方案一:给done方法额外传递参数

修改someOuter中调用done的方式,把外层的x和y作为参数传入,让done在调用回调时把这些参数传递进去:

function someOuter() {
    const x = 10;
    const y = 20;
    // 额外传入x和y作为done的参数
    myMethod.done((x, y) => {
        return x + y;
    }, x, y);
}

对应的myMethod.done定义:

const myMethod = {
    done: (callback, ...args) => {
        // 使用扩展运算符将接收的参数传递给回调
        return callback(...args);
    },
}

这样调用done时,外层的10和20会被传递给回调的参数x和y,最终返回30。

方案二:调整回调函数以捕获外层变量

如果不想修改done的调用方式,可以去掉回调函数的参数,让箭头函数直接捕获外层作用域的x和y:

function someOuter() {
    const x = 10;
    const y = 20;
    // 回调不再声明x、y参数,直接引用外层变量
    myMethod.done(() => {
        return x + y;
    });
}

对应的myMethod.done定义:

const myMethod = {
    done: (callback) => {
        // 直接调用回调即可,它会自行捕获外层的x和y
        return callback();
    },
}

这种方式利用了箭头函数的词法作用域特性,回调在定义时就绑定了外层的x和y,调用时无需额外传参。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:52:05