传递回调函数时,可以设置参数吗?

时间:2011-08-08 16:41:00

标签: javascript

我将回调函数作为参数传递给函数,我在我的Web应用程序的各个部分执行此操作。

我希望回调在某些情况下的反应有点不同,我可以以某种方式将参数传递给此回调吗?

soemethod(callback);
otherethod(callback);

otherother(callback(a=1));

如何在回调中传递= 1?

3 个答案:

答案 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)));
    };
  };