将函数赋值给变量并传递参数

时间:2011-11-03 14:15:14

标签: javascript jquery

我想这可能是一个简单的问题,但我自己无法弄明白(使用错误的搜索条件?)。

正如标题所说,我想为变量分配一个函数,并将变量传递给该函数,如下所示:

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();
}

如何实现这一目标?

4 个答案:

答案 0 :(得分:2)

这是将函数赋值给变量

的基本形式
var myFunc = function(x) {
   console.log(x);
}

一旦完成,您可以像这样调用函数(传入任何你想要的东西)

myFunc(1);

答案 1 :(得分:1)

您必须致电:

var some_control = {id: "myOwnId"};
doStuff(some_control);

它使用对象文字{ }创建一个对象。然后,定义属性id。整个对象作为参数传递给函数doStuff

答案 2 :(得分:1)

我认为你在这里寻找的是一个闭包,它是一个函数,它记住创建时的范围内的变量(在你的情况下是“控制”),然后从其他地方调用。在您的示例中,您可以从doStuff函数返回myObj,每当调用mouseup()时,它将引用控件的“右”值。所以实际上,你已经在该示例代码中创建了一个闭包。

如果你想让闭包只保留对id的引用,你可以这样做:

function doStuff(control) {
    var myId = control.id;
    var myObj = {
        "smooth": false,
        "mouseup": function(value) {
            jQuery(_getSelectorStringFromControlId(myId)).blur();
        }
    };
}

您现在可以在页面上方放置大量myObj副本,并且每个副本上的mouseup()将使用不同的ID。

关于闭包的更多信息: https://developer.mozilla.org/en/JavaScript/Guide/Closures

顺便说一句,对于那些从未做过任何函数式编程的人来说,闭包是最好的事情

答案 3 :(得分:0)

function doStuff(control) {
    var myObj = {
        "smooth": false,
        "mouseup": function(value) {
            jQuery(_getSelectorStringFromControlId(control.id)).blur();
         }
    };
}

doStuff({id: "yourID"}); // works now

jsFiddle上进行测试。

还有一个问题:您无法访问内部value参数,但我假设您要将此匿名函数绑定到事件侦听器。