2012-03-09 33 views
5

我有包含anonymus函數定義的字符串,但我怎麼稱呼它。比方說,功能就像這樣:如何從字符串調用匿名函數

var fn_str = "function(){ alert('called'); }"; 

嘗試的eval,卻得到了一個錯誤,函數必須有一個名字。

eval(fn_str).apply(this); // SyntaxError: function statement requires a name 
+0

你叫'eval'用'了'而函數字符串在'fn_str'中。這不會用這種方式... – gdoron 2012-03-09 08:33:15

+0

對不起,我用了一個在螢火蟲控制檯的簡稱,但忘了改變這一點,雖然 – Kristian 2012-03-09 08:35:20

回答

5

您可以使用立即調用函數表達式

var fn_str = "function(){ alert('called'); }"; 
eval('(' + fn_str +')();'); 

Immediately Invoked Function Expression

另一種方法是使用一個Function對象(如果有函數體字符串):

var func = new Function("alert('called')"); 
func.apply(this); 
+1

已經想通了,但謝謝!接受/ + 1快速回復:) – Kristian 2012-03-09 08:30:17

1

找到了解決辦法:把功能括號

var a = "(function(){ alert('called'); })"; 
eval(a).apply(this); 
+1

你不需要寫'使用'應用'你可以使用* Immediately Invoked Function Expressions **我回答。 – gdoron 2012-03-09 08:29:58

+0

我知道這個語法,但我不能通過一個參數傳遞一個對象(不需要將對象解析爲字符串)。或者我可以嗎? – Kristian 2012-03-09 08:34:19

+0

你在評論中的意思是什麼,我不明白。你需要什麼? – gdoron 2012-03-09 09:06:34

相關問題