有一些类似的问题,但我仍然困惑。因为我的案例是以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(){ ... }
这样的匿名函数(匿名函数会被调用两次吗?)
谢谢
答案 0 :(得分:3)
要传递要使用参数执行的函数,可以使用lambda。 lambda作为参数func
传递。
示例:(这是caller
的调用 - text
,who
,dowhat
和mycode
是参数/变量.lambda仍然有由于closures而访问who
,dowhat
和mycode
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));