将参数作为参数传递给函数?

是否可以传递一个包含参数的 javascript 函数作为参数?

例如:

$(edit_link).click( changeViewMode( myvar ) );
124004 次浏览

使用“结束语”:

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

这将创建一个匿名临时函数包装器,该包装器知道该参数并将其传递给实际的回调实现。

是的,像这样:

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

没有,但是您可以传递一个没有参数的函数,然后执行以下操作:

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

所以你传递了一个没有参数的匿名函数然后这个函数用闭包中的变量调用你的参数化函数

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

bind()方法创建一个新函数,该函数在调用时将其 this关键字设置为提供的值,并且在调用新函数时提供的任何参数之前有一个给定的参数序列。

所有主流浏览器都支持它,包括 IE9 + 。

您的代码应该如下所示:

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

附注: 我假设您在全局上下文中,即 this变量是 window; 否则使用 this而不是 null

你能做到的

var message  = 'Hello World';


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

然后

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


activate(callback);

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

演示

以下是费迪南德•拜尔(Ferdinand Beyer)方法的一个例子:

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

在这个示例中,“参数值”通过函数包从 function 1传递到 function 3,再通过 function 2传递。

或者,如果您正在使用 es6,您应该能够使用箭头函数

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