我将回调函数作为参数传递给函数,我在我的Web应用程序的各个部分执行此操作。
我希望回调在某些情况下的反应有点不同,我可以以某种方式将参数传递给此回调吗?
soemethod(callback);
otherethod(callback);
otherother(callback(a=1));
如何在回调中传递= 1?
答案 0 :(得分:4)
只需使用围绕参数化函数调用的匿名函数:
otherother(function () {
callback(1); // assuming the first parameter is called a
});
答案 1 :(得分:0)
不,你不能。
但你可以这样做:
soemethod(callback);
otherethod(callback);
otherother(callback, 1);
function otherother(callback, defaultValue) {
var value = defaultValue;
// your logic here, ie.
if(someCondition)
value = 2;
callback(value);
}
答案 2 :(得分:0)
正如其他人已经提到的那样,你不能在Javascript中传递这样的默认参数 - 你必须自己创建单独的函数。
可以做的是使用一些非常巧妙的帮助函数来自动创建这些闭包。我最喜欢的模式之一是partial function application,其中“默认”参数是最左边的参数。
如果您使用的是新浏览器,则可以使用Function.prototype.bind(它还会处理this
参数 - 这也可以允许将方法作为回调传递)
otherother( callback.bind(undefined, 1) );
//sets the first parameter to 1
//when the callback is called, the 2nd, 3rd, parameters are filled and so on
如果您还需要支持旧版浏览器,create your own部分应用程序功能并不难(许多JS框架都有某种类型,下一个示例来自Prototype)
Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
};
};