将字符串Eval到可调用的JS函数

时间:2013-07-22 16:04:59

标签: javascript eval

我需要eval一个保存为字符串的函数,然后在JS代码中使用它,这是场景:

第1步

<textarea id="function_text">function test(e){ alert(e.id); }</textarea>

第2步

var thatFunction = eval($("#function_text").val()); // returns undefined

第3步

thatFunction.call({id: 100});

有办法吗?

P.S。我知道所有安全方面的考虑因素,我只需要在步骤3中提醒100!

2 个答案:

答案 0 :(得分:4)

我要给你一个警告,不要这样做,但这是如何:

var thatFunction = Function('return ' + $("#function_text").val())();
thatFunction.call({id: 100});

答案 1 :(得分:2)

字符串中的代码将被评估为函数声明并且不会产生返回值,这就是eval返回undefined的原因。

您可以将函数声明与变量赋值连接起来:

eval('var thatFunction = ' + $("#function_text").val());

只需按照名称调用该函数(您知道):

test.call({id: 100});

您可能不想在字符串中使用变量名称。这不是问题,你所要做的就是强制eval将函数定义视为函数表达式并让它返回函数。例如,您可以使用分组运算符

执行此操作
var thatFunction = eval('(' + $("#function_text").val() + ')');

更加模糊的方式是逗号运算符

var thatFunction = eval('0,' + $("#function_text").val());