如何定义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
相关产品推荐
相关产品推荐

