将字符串求值为可调用的JS函数

Eval a string to a callable JS function

本文关键字:调用 JS 函数 字符串      更新时间:2023-09-26

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

有办法做到这一点吗?

附言:我知道所有的安全考虑,我只需要在第三步提醒100!

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

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

字符串中的代码将被计算为函数声明,而不会产生返回值,这就是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());