将函数绑定到javascript中的另一个函数

时间:2013-06-16 20:20:36

标签: javascript function bind

我在javascript中有一个函数

function foo(callback) {
    console.log("Hello");
    callback();
}

和另一个功能

function bar() {
  console.log("world");
}

我想创建一个函数FooBar

FooBar = foo.bind(this, bar);

这很好用,但我实际上要做的是创建一个function queue,并且在绑定回调之前我经常需要绑定一个none函数参数,如下例所示

function foo() {
    console.log(arguments[0]);
    var func = arguments[1];
    func();
}

function bar() {
    console.log("world");
}

foo.bind(this, "hello");
var FooBar = foo.bind(this, bar);

FooBar();

产生此错误

[Function: bar]

TypeError: undefined is not a function

一旦将函数绑定到其他非函数类型,我如何将函数绑定到另一个函数?

2 个答案:

答案 0 :(得分:5)

您将"Hello"绑定到foo,然后另外将bar绑定到foo - 不应该绑定{{1} }第一个bar的结果,如下所示:

bind

Fiddle here.(记录" Hello"," world")。

答案 1 :(得分:4)

bind方法不会将函数绑定到彼此,它的目的是在调用函数时修复'this'关键字的上下文和任何参数。然后它返回一个新函数,保持原始状态不变。

所以:foo.bind(this, "hello")实际上没有效果。第二次调用bind会创建一个具有固定参数bar的新函数。您收到错误的原因是因为只传递了一个参数,arguments[1]未定义。

你可以像Richie建议并添加一个中间变量,或者只是在一个绑定中传递两个参数:

var FooBar = foo.bind(this, "hello", bar);

最好还包括运行时检查,以便您的函数可以检测它何时处理函数。这将节省您不必担心参数顺序。

if(typeof func === 'function'){
  func();
}