2

我需要评估一个保存为字符串的函数,然后在 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});

有没有办法做到这一点?

PS 我知道所有的安全注意事项,我只需要在第 3 步收到 100 个警报!

4

2 回答 2

4

我要给你一个警告,不要这样做,但方法如下:

var thatFunction = Function('return ' + $("#function_text").val())();
thatFunction.call({id: 100});
于 2013-07-22T16:09:20.810 回答
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());
于 2013-07-22T16:10:46.983 回答