Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中将一个函数绑定到另一个函数_Javascript_Function_Bind - Fatal编程技术网

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

在javascript中将一个函数绑定到另一个函数,javascript,function,bind,Javascript,Function,Bind,我有一个javascript函数 function foo(callback) { console.log("Hello"); callback(); } 还有一个功能 function bar() { console.log("world"); } 我想做一个函数FooBar FooBar = foo.bind(this, bar); 这很好,但是我实际上要做的是创建一个函数,通常我必须在绑定回调之前绑定一个none函数参数,如下例所示 function foo()

我有一个javascript函数

function foo(callback) {
    console.log("Hello");
    callback();
}
还有一个功能

function bar() {
  console.log("world");
}
我想做一个函数
FooBar

FooBar = foo.bind(this, bar);
这很好,但是我实际上要做的是创建一个函数,通常我必须在绑定回调之前绑定一个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
一个I如何将一个函数绑定到另一个函数,一旦它绑定到了其他非函数类型?

您将
“Hello”
绑定到
foo
,然后分别将
bar
绑定到
foo
上-您不应该将
bar
绑定到第一个
绑定的结果上吗

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

(它记录“Hello”,“world”)。

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

所以:
foo.bind(这个“hello”)
实际上没有效果。第二次调用bind将创建一个固定参数为
bar
的新函数。出现错误的原因是因为只传递了一个参数,
参数[1]
未定义

您可以按照Richie的建议添加一个中间变量,或者在一个绑定中传递两个参数:

var FooBar = foo.bind(this, "hello", bar);
最好还包括运行时检查,以便您的函数能够在处理函数时进行检测。这将使您不用担心参数顺序

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

有关不太复杂的示例,请参见。阅读一下bind这个例子,这个fiddle链接让它看起来像你实际上是在绑定一个foo的绑定。。。