我有这个简单的代码:
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。我想避免任何全局标记解决方案
感谢。
答案 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)
}
希望这能帮到你