2011-11-03 172 views
2

我想这可能是一个简单的问题,但我自己弄不清楚(使用错误的搜索条件?)。将函数赋值给变量并传递参数

正如标题所说,我想一个函数分配给一个变量和一个变量传递给像这样的功能:

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

现在我想的control.id与之前其实际值替换该函数被分配给mouseup变量。

所以当control.id = 'myOwnId' 然后myObj.mouseup应该是:

function(value) { 
    jQuery(_getSelectorStringFromControlId('myOwnId')).blur(); 
} 

这又如何实现呢?

回答

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

顺便说一句,倒闭是最好的东西是永远不会为完全令人惊讶的人谁从来没有做过任何函数式编程。

+0

封闭是要走的路,谢谢。事实上,我在一个循环中完成了整个函数分配,因此提供的链接中的'在循环中创建闭包:常见错误'段落给了我解决方案。 – Moolie

1

这是一个变量

var myFunc = function(x) { 
    console.log(x); 
} 

一旦分配函数的基本形式完成,你可以调用函数像这样(在任何路过你想)

myFunc(1); 
+0

我的问题不是那么简单,当定义一个匿名函数替换参数与变量的值更棘手。N3dst4指出我正确的方向 – Moolie

1

你将不得不打电话:

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

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

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

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

jsFiddle上测试。

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