传递带参数的函数作为参数?

时间:2009-08-19 14:13:30

标签: javascript

是否可以传递带参数的javascript函数作为参数?

示例:

$(edit_link).click( changeViewMode( myvar ) );

7 个答案:

答案 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);

或者如果你的回调包含更灵活的逻辑,你可以传递对象。

Demo

答案 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));