如何在javascript中将带参数的函数传递给函数

时间:2013-10-02 17:50:47

标签: javascript

鉴于此定义......

function initialize(lat, lng)
{
   //do stuff
}

如何在此调用中调用initialize函数的参数?

google.maps.event.addDomListener(window, 'load', initialize);

我想做这样的事情:

google.maps.event.addDomListener(window, 'load', initialize(58,18));

即使没有传递任何参数,调用1仍可正常工作,但它与我想要完成的调用2类似。

对不起,这可能很容易,我是javascript的新手......(但我已经用Google搜索了很长时间了)

编辑:

Grrr,发现它,发誓我已经尝试过了,一定有类型或者是smoething!

google.maps.event.addDomListener(window, 'load', function(){initialize(1,2);});

2 个答案:

答案 0 :(得分:0)

google.maps.event.addDomListener(window, 'load', function () {
    push.call(arguments, 58);
    push.call(arguments, 18);
    initialize.apply(this, arguments);
});

不完全,初始化没有DomListener的签名,最好这样做:

google.maps.event.addDomListener(window, 'load', function () {
    initialize.call(this, 58, 18);
});

第一个将两个参数推送到特殊的arguments伪数组(因此需要call),然后在监听器的上下文中调用initialize,applying参数来自当前函数的被调用函数的参数(初始化)。

第二个调用在侦听器的上下文中初始化。如果您不需要上下文,则可以执行以下操作:

google.maps.event.addDomListener(window, 'load', function () {
    initialize(58, 18);
});

答案 1 :(得分:0)

这是Function.prototype.bind可以实现的事情之一,但也要记住你想要的this

google.maps.event.addDomListener(
    window,
    'load',
    initialize.bind(null, 58, 18)
);

以上内容会调用initialisedthis设置为window,前两个参数5818。在这个例子中可能更容易理解

function foo(a, b, c) {
    console.log(this, a, b, c);
}
var foobar = foo.bind(null, 1, 2);
foobar('bar');
// window, 1, 2, "bar"