是否可以传递一个带有参数的javascript函数作为参数?示例:
$(edit_link).click( changeViewMode( myvar ) );
iszxjhcz1#
使用“闭包”:
$(edit_link).click(function(){ return changeViewMode(myvar); });
这将创建一个匿名的临时函数 Package 器,该 Package 器知道参数并将其传递给实际的回调实现。
ldxq2e6h2#
使用Function.prototype.bind()。引用MDN:
Function.prototype.bind()
**bind()**方法创建一个新函数,调用该函数时,将其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前提供一个给定的参数序列。
bind()
this
所有主流浏览器都支持它,包括IE9+。你的代码应该看起来像这样:
$(edit_link).click(changeViewMode.bind(null, myvar));
附注:我假设你是在全球范围内,即。this变量为window;否则使用this而不是null。
window
null
icnyk63a3#
不可以,但是你可以传递一个不带参数的参数,然后这样做:
$(edit_link).click( function() { changeViewMode(myvar); } );
所以你传递了一个不带参数的匿名函数,这个函数调用了你的参数化函数,函数的闭包中有变量
kuarbcqp4#
或者如果你使用的是es6,你应该可以使用箭头函数
$(edit_link).click(() => changeViewMode(myvar));
mbyulnm05#
是的,像这样:
$(edit_link).click(function() { changeViewMode(myvar) });
jvidinwx6#
你能做到的
var message = 'Hello World'; var callback = function(){ alert(this) }.bind(message);
然后
function activate(callback){ callback && callback(); } activate(callback);
或者如果你的回调包含更灵活的逻辑,你可以传递对象。Demo
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。
7条答案
按热度按时间iszxjhcz1#
使用“闭包”:
这将创建一个匿名的临时函数 Package 器,该 Package 器知道参数并将其传递给实际的回调实现。
ldxq2e6h2#
使用
Function.prototype.bind()
。引用MDN:**
bind()
**方法创建一个新函数,调用该函数时,将其this
关键字设置为提供的值,并在调用新函数时提供的任何参数之前提供一个给定的参数序列。所有主流浏览器都支持它,包括IE9+。
你的代码应该看起来像这样:
附注:我假设你是在全球范围内,即。
this
变量为window
;否则使用this
而不是null
。icnyk63a3#
不可以,但是你可以传递一个不带参数的参数,然后这样做:
所以你传递了一个不带参数的匿名函数,这个函数调用了你的参数化函数,函数的闭包中有变量
kuarbcqp4#
或者如果你使用的是es6,你应该可以使用箭头函数
mbyulnm05#
是的,像这样:
jvidinwx6#
你能做到的
然后
或者如果你的回调包含更灵活的逻辑,你可以传递对象。
Demo
aydmsdu97#
这是遵循Ferdinand Beyer方法的一个例子:
在这个例子中,“参数值”使用函数 Package 通过函数2从函数1传递到函数3。