2012-12-17 71 views
0

总新手问题。 我如何得到下面的代码工作。将字符串转换为函数

var f_str = "function test(msg) { alert(msg) }" 
var f = eval(f_str) 
f("hello") 

这个想法是让功能测试作为一个字符串,并能够作为一个函数来执行它。 eval似乎不工作,我也试过JSON.parse,没有运气..

+3

我不知道你的实际需要,但如果你使用eval,你可能做错了。 – Grinn

回答

4

f_str的周围加上括号,以便它被解释为函数表达式。

var f_str = "(function test(msg) { alert(msg) })"; 
var f = eval(f_str); 
f("hello"); 

在您当前的代码中,代码被解释为函数声明。您可以通过打印/看到这个使用test值:

var f_str = "function test(msg) { alert(msg) }"; 
var f = eval(f_str);//^^^^ 
test("hello"); // <-- 
0

这通常是一个坏主意;如果要执行动态JavaScript,你可以使用一个片段是这样的:

(function() { 
    var code = document.createElement('script'); 
    code.type = 'text/javascript'; 
    code.async = true; 
    code.src = '/path/to/script'; 
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(code, s); 
    }()); 

或者使用jQuery.getScript()

$.getScript('/path/to/script');