传递带参数的函数作为另一个函数的参数

时间:2013-06-22 23:37:59

标签: javascript jquery

有一些类似的问题,但我仍然困惑。因为我的案例是以params 作为另一个函数的参数。

简单案例:

var who = 'Old IE',
dowhat  = 'eat',
mycode  = 'my code :(',
text    = 'I dont know why';

function whathappen(who, dowhat, mycode) {
    alert(who + dowhat + mycode);
}

function caller(text, func) {
    alert(text);
    func();
}

问题:如何做caller(text, whathappen(who, dowhat, mycode));之类的事情?我不确定我们是否使用像caller(text, function(){ ... }这样的匿名函数(匿名函数会被调用两次吗?)

谢谢

2 个答案:

答案 0 :(得分:3)

要传递要使用参数执行的函数,可以使用lambda。 lambda作为参数func传递。

示例:(这是caller的调用 - textwhodowhatmycode是参数/变量.lambda仍然有由于closures而访问whodowhatmycode

caller(text, function () {
    whathappen(who, dowhat, mycode);
});

至于“那个匿名的func。叫两次吗?”,如果我理解你的意思,不。也许你已经看过类似

的语法
(function () {
    ...
})();

这是一个在创建后立即调用的lambda(注意结尾的括号“调用”lambda)。在第一个示例中,您只创建并传递匿名函数(函数在Javascript中为first class objects)。

答案 1 :(得分:2)

您可以使用proxy method创建一个调用另一个具有特定值的函数的函数:

caller(text, $.proxy(whathappen, this, who, dowhat, mycode));