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

是否有可能传递一个JavaScript函数参数作为参数?

例:

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

使用“closures”:

 $(edit_link).click(function(){ return changeViewMode(myvar); }); 

这创build了一个匿名的临时函数包装器,它知道参数并将其传递给实际的callback实现。

使用Function.prototype.bind() 。 引用MDN:

bind()方法创build一个新的函数,当被调用时,它的this关键字被设置为提供的值,并且在调用新函数时提供的任何参数序列都在前面。

它受到所有主stream浏览器的支持,其中包括IE9 +。

你的代码应该是这样的:

 $(edit_link).click(changeViewMode.bind(null, myvar)); 

附注:我假设你在全局范围内,即thisvariables是window ; 否则使用this而不是null

不,但是你可以通过一个没有参数,做到这一点:

 $(edit_link).click( function() { changeViewMode(myvar); } ); 

所以你传递一个没有参数的匿名函数,然后函数用闭包中的variables调用你的参数化函数

是的,像这样:

 $(edit_link).click(function() { changeViewMode(myvar) }); 

你可以这样做

 var message = 'Hello World'; var callback = function(){ alert(this) }.bind(message); 

接着

 function activate(callback){ callback && callback(); } activate(callback); 

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

演示

这是费迪南德·拜尔的方法之后的一个例子:

 function function1() { function2(function () { function3("parameter value"); }); } function function2(functionToBindOnClick) { $(".myButton").click(functionToBindOnClick); } function function3(message) { alert(message); } 

在这个例子中,“参数值”使用函数包装从函数1传递到函数3。