传递参数作为参数的函数?
是否有可能传递一个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));
附注:我假设你在全局范围内,即this
variables是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。