Javascript 将函数赋值给变量并传递参数
我想这可能是一个简单的问题,但我自己无法解决(使用错误的搜索条件?) 正如标题所说,我想将一个函数分配给一个变量,并将一个变量传递给该函数,如下所示:Javascript 将函数赋值给变量并传递参数,javascript,jquery,Javascript,Jquery,我想这可能是一个简单的问题,但我自己无法解决(使用错误的搜索条件?) 正如标题所说,我想将一个函数分配给一个变量,并将一个变量传递给该函数,如下所示: function doStuff(control) { var myObj = { "smooth": false, "mouseup": function(value) { jQuery(_getSelectorStringFromControlId(control.id)).bl
function doStuff(control) {
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(control.id)).blur();
}
};
}
现在,我希望在将函数分配给mouseup变量之前,用实际值替换control.id
因此,当control.id='myOwnId'时,myObj.mouseup
应为:
function(value) {
jQuery(_getSelectorStringFromControlId('myOwnId')).blur();
}
如何实现这一点?这是将函数分配给变量的基本形式
var myFunc = function(x) {
console.log(x);
}
完成后,您可以像这样调用函数(传入任何您想要的内容)
您必须致电:
var some_control = {id: "myOwnId"};
doStuff(some_control);
它使用对象文本创建对象,{}
。然后,定义属性id
。整个对象作为参数传递给函数doStuff
function doStuff(control) {
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(control.id)).blur();
}
};
}
doStuff({id: "yourID"}); // works now
测试它。
还有一个问题:您无法访问内部的
值
参数,但我假设您要将此匿名函数绑定到事件侦听器。我认为您在这里要查找的是一个闭包,即一个函数在创建时会记住作用域中的变量(“控制”)但后来从别处接到电话。在您的示例中,可以从doStuff函数返回myObj,并且无论何时调用mouseup(),它都将引用控件的“right”值。事实上,您已经在该示例代码中创建了一个闭包
如果要使闭包仅保留对id的引用,可以执行以下操作:
function doStuff(control) {
var myId = control.id;
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(myId)).blur();
}
};
}
现在,您的页面上可以有很多myObj的副本,在每个副本上,mouseup()将使用不同的id
有关闭包的更多信息:
顺便说一句,闭包是有史以来最棒的东西,对于那些从未做过函数式编程的人来说,闭包是最棒的东西。谢谢。事实上,我在一个循环中分配了整个函数,因此在提供的链接中的“在循环中创建闭包:一个常见错误”一段给出了我的解决方案。我的问题并不是那么简单,当定义一个匿名函数用变量的值替换一个参数时更棘手。N3dst4为我指明了正确的方向
function doStuff(control) {
var myId = control.id;
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(myId)).blur();
}
};
}