2010-10-14 92 views
5

我該怎麼做?帶參數的函數的Javascript eval()

function myUIEvent() { 
    var iCheckFcn = "isInFavorites"; 
    var itemSrc = ui.item.find("img").attr("src"); 

    if (eval(iCheckFcn(itemSrc))) { alert("it's a favorite"); } 

function isInFavorites(url) { return true; } // returns boolean 
+2

你可能要開始通過編寫語法有效的代碼。你在那裏丟失了一個右大括號。 – 2010-10-14 17:44:35

回答

6

首先不要使用eval()

function myUIEvent() { 
    var iCheckFcn = isInFavorites; 
    var itemSrc = ui.item.find("img").attr("src"); 

    if (iCheckFcn(itemSrc)) { alert("it's a favorite"); } 
} 

函數是對象,您可以將函數的引用賦值給任何變量。然後您可以使用該引用來調用該函數。

+0

歡呼!感謝您的解釋。 – FFish 2010-10-14 17:49:56

+0

我認爲這是錯過了問題的重點。您的示例仍然將var iCheckFcn硬編碼爲硬編碼值isInFaorites。這個問題具體問到如何設置iCheckFcn動態使用非硬編碼函數的名稱,但作爲變量傳入(在他的例子中稱爲var iCheckFcn在這種情況下被分配一個硬編碼字符串,但可以是動態傳遞的字符串。 – 2017-01-16 05:22:18

+0

@PaulGorbas你意識到這已經超過6歲了吧?無論如何,對函數的引用可以作爲參數傳遞,並且仍然不需要'eval()'。 – Pointy 2017-01-16 13:18:37

2

的最好方法是什麼尖尖的描述,或者你可能只是這樣做:

if (window[iCheckFcn](itemSrc)) { 
    alert("it's a favorite"); 
}; 
0

如果你在AngularJS的環境中,它只是簡單:

$rootScope.calculate = function(param1,param2) 
{ 
    console.log(param1+param2); 
} 

var func = '$rootScope.calculate'; 
eval(func)(1,2); //---> 3