Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将函数赋值给变量并传递参数_Javascript_Jquery - Fatal编程技术网

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