2012-03-09 142 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