带参数的Javascript回调函数?

时间:2012-07-25 06:54:59

标签: javascript

我有这个简单的代码:

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

一切都好。

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

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

我希望输出为:

in callback... for value  xxxx

如何在doWork('a', 'b', myCb);中使用myCb调用发送参数? ('当您运行回调函数时,请根据值xxxx运行它')

任何帮助?

P.S。我想避免任何全局标记解决方案

感谢。

4 个答案:

答案 0 :(得分:4)

常见的解决方案是创建另一个功能。

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

你也可以使用一个抽象currying的函数。 JavaScript(ES5)甚至还有一个内置的 - Function.prototype.bind。请注意,原生bind会使您的回调变慢并且在浏览器中的支持有限(请参阅MDN页面)。

doWork('a', 'b', myCb.bind(null, 'xxxx'));

答案 1 :(得分:1)

其中一个解决方案是使用.bind

doWork('a', 'b', myCb.bind(null, 'xxx'));

答案 2 :(得分: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示例

答案 3 :(得分: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)
}

希望这能帮到你