我在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
一旦将函数绑定到其他非函数类型,我如何将函数绑定到另一个函数?
答案 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();
}