如何将参数绑定到回调? 在C++中,你有一个允许你把参数绑定到函数的绑定< /代码>函数。调用函数时,将使用这些参数调用该函数。类似地,MySQL能够将参数绑定到查询,并用变量替换问号。在Javascript和jQuery中,bind函数的含义截然不同。它使传递的参数成为这个变量,这根本不是我想要的。下面是我想要实现的一个例子: var outerVariable; var callbacks = [ some_object.event, some_object.differentEvent.bind(outerVariable) ]; // func() will automatically have outerVariable in scope $.map(callbacks, function(func) { func(); });

如何将参数绑定到回调? 在C++中,你有一个允许你把参数绑定到函数的绑定< /代码>函数。调用函数时,将使用这些参数调用该函数。类似地,MySQL能够将参数绑定到查询,并用变量替换问号。在Javascript和jQuery中,bind函数的含义截然不同。它使传递的参数成为这个变量,这根本不是我想要的。下面是我想要实现的一个例子: var outerVariable; var callbacks = [ some_object.event, some_object.differentEvent.bind(outerVariable) ]; // func() will automatically have outerVariable in scope $.map(callbacks, function(func) { func(); });,javascript,jquery,Javascript,Jquery,改为这样做: var callbacks = [ some_object.event, some_object.differentEvent.bind(some_object, outerVariable) ]; P> > C++与JavaScript BIN < /C>之间的唯一区别是JavaScript < Cord>Bix有一个额外的参数: TestARG< /COD>,它将绑定关键字>代码> < >绑定函数,以传递任何传入的函数。如果不想重新绑定这个< /C> >

改为这样做:

var callbacks = [
    some_object.event,
    some_object.differentEvent.bind(some_object, outerVariable)
];

<> P> > C++与JavaScript <代码> BIN < /C>之间的唯一区别是JavaScript < Cord>Bix有一个额外的参数:<代码> TestARG< /COD>,它将绑定关键字>代码> < <代码> >绑定函数,以传递任何传入的函数。如果不想重新绑定<代码>这个< /C> >参数,那么将NULL作为第一个参数,其余的对您所说的C++变体看起来应该是熟悉的:

function add(a, b) {
    return a + b
}

var three = add(1, 2)
var makeThree = add.bind(null, 1, 2)
three = makeThree()

我认为没有一种简单的方法可以使用
bind
,而不必使用
this
,如果您只想绑定参数,那么最好编写一个包装器

function bindArgs(fn) {
    var slice = Array.prototype.slice,
        bound_args = slice.call(arguments, 1);
    return function () {
        var args = slice.call(arguments, 0);
        return fn.apply(this, bound_args.concat(args));
    }
}
现在


outerVariable
无论如何都将在作用域中,因为它比
func
function foo(a, b) {
    console.log(this, a, b);
}
var bar = bindArgs(foo, 'bar');
var obj = {baz: bar};
obj.baz('baz'); // logs obj, "bar", "baz"