2

我有这个简单的代码:

console.log('calling doWork func...')
doWork('a', 'b', myCb);

function doWork(param1, param2, callback)
{
        console.log('in func')
        callback();
}


function myCb(a)
{
        console.log('in callback... for value ' + a)
}

我正在使用回调函数运行该函数 -

我得到的输出是:

"calling doWork func..."
"in func"
"in callback... for value undefined"    // notice the undefined

一切都好。

现在,我希望使用指定的参数调用回调 - 类似于(这是不正确的,因为()正在执行 func):

doWork('a', 'b', myCb('xxxx'));

我希望输出为:

in callback... for value  xxxx

如何通过 myCb 调用发送参数 doWork('a', 'b', myCb);('当你运行回调函数时,请根据值xxxx运行')

有什么帮助吗?

ps 我想避免任何全局标志解决方案

谢谢。

4

4 回答 4

4

常见的解决方案是就地创建另一个函数。

doWork('a', 'b', function () {
    myCb('xxxx');
});

您还可以使用一个函数来抽象柯里化。JavaScript (ES5) 甚至内置了一个 – Function.prototype.bind. 请注意,本bind机会使您的回调变慢并且在浏览器中的支持有限(请参阅 MDN 页面)。

doWork('a', 'b', myCb.bind(null, 'xxxx'));
于 2012-07-25T06:58:27.653 回答
1

解决方案之一是使用.bind

doWork('a', 'b', myCb.bind(null, 'xxx'));
于 2012-07-25T07:00:50.947 回答
1

或者你可以使用 apply 和 arguments

console.log('calling doWork func...')
doWork('va', 'b', myCb);

function doWork(param1, param2, callback)
{
        console.log('in func')


        callback.apply(this,arguments);
}


function myCb(a)
{
        console.log('in callback... for value ' + a)
}

JSbin示例

于 2012-07-25T07:07:14.860 回答
0
console.log('calling doWork func...')
doWork (myCb, "a", "b");
function doWork (callback) {
console.log('in func')
callback (arguments[1], arguments[2]);
}
function myCb (param1, param2) {
console.log('in callback... for value ' + param1)
}

希望这对你有帮助

于 2012-07-25T07:02:24.117 回答