我需要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!
答案 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());