javascript 传递一个带有参数的函数?

camsedfj  于 2023-05-27  发布在  Java
关注(0)|答案(7)|浏览(145)

是否可以传递一个带有参数的javascript函数作为参数?
示例:

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

iszxjhcz1#

使用“闭包”:

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

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

ldxq2e6h

ldxq2e6h2#

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

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

所有主流浏览器都支持它,包括IE9+。
你的代码应该看起来像这样:

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

附注:我假设你是在全球范围内,即。this变量为window;否则使用this而不是null

icnyk63a

icnyk63a3#

不可以,但是你可以传递一个不带参数的参数,然后这样做:

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

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

kuarbcqp

kuarbcqp4#

或者如果你使用的是es6,你应该可以使用箭头函数

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

mbyulnm05#

是的,像这样:

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

jvidinwx6#

你能做到的

var message  = 'Hello World';

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

然后

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

activate(callback);

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

aydmsdu9

aydmsdu97#

这是遵循Ferdinand Beyer方法的一个例子:

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

在这个例子中,“参数值”使用函数 Package 通过函数2从函数1传递到函数3。

相关问题