是否可以传递带参数的javascript函数作为参数?
示例:
$(edit_link).click( changeViewMode( myvar ) );
答案 0 :(得分:212)
使用“闭包”:
$(edit_link).click(function(){ return changeViewMode(myvar); });
这将创建一个匿名临时函数包装器,它知道参数并将其传递给实际的回调实现。
答案 1 :(得分:35)
使用Function.prototype.bind()
。引用MDN:
bind()
方法创建一个新函数,在调用时,将其this
关键字设置为提供的值,并在给定的任何参数之前提供给定的参数序列调用新函数。
所有主流浏览器都支持它,包括IE9 +。
您的代码应如下所示:
$(edit_link).click(changeViewMode.bind(null, myvar));
旁注:我假设您处于全球范围内,即this
变量为window
;否则请使用this
代替null
。
答案 2 :(得分:15)
不,但你可以传递一个没有参数,并执行此操作:
$(edit_link).click(
function() { changeViewMode(myvar); }
);
所以你传递一个没有参数的匿名函数,然后该函数用闭包中的变量调用你的参数化函数
答案 3 :(得分:8)
是的,就像这样:
$(edit_link).click(function() { changeViewMode(myvar) });
答案 4 :(得分:2)
你可以这样做
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
然后
function activate(callback){
callback && callback();
}
activate(callback);
或者如果你的回调包含更灵活的逻辑,你可以传递对象。
答案 5 :(得分:2)
这是Ferdinand Beyer的方法之后的一个例子:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
在这个例子中,“参数值”使用函数换行从function1传递到function3到function2。
答案 6 :(得分:1)
或者如果您使用的是es6,您应该可以使用箭头功能
$(edit_link).click(() => changeViewMode(myvar));