[英]Assign function to variable and pass parameter
我想這可能是一個簡單的問題,但我自己無法弄明白(使用錯誤的搜索條件?)。
正如標題所說,我想為變量分配一個函數,並將變量傳遞給該函數,如下所示:
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);
}
完成后,您可以像這樣調用函數(傳入您想要的任何內容)
myFunc(1);
你必須打電話:
var some_control = {id: "myOwnId"};
doStuff(some_control);
它使用對象文字{ }
創建一個對象。 然后,定義屬性id
。 整個對象作為參數傳遞給函數doStuff
。
我認為你在這里尋找的是一個閉包,它是一個函數,它記住創建時在范圍內的變量(在你的情況下是“控制”),然后從其他地方調用。 在您的示例中,您可以從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
順便說一句,對於那些從未做過任何函數式編程的人來說,閉包是最好的事情 。
function doStuff(control) {
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(control.id)).blur();
}
};
}
doStuff({id: "yourID"}); // works now
在jsFiddle上測試它。
還有一個問題:您無法訪問內部value
參數,但我假設您要將此匿名函數綁定到事件偵聽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.