簡體   English   中英

將函數賦值給變量並傳遞參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM