如果我将函数放入这样的字符串中:

var functionString = function (message) {
    console.log(message);
}.toString();

有什么方法可以将字符串转换回函数并调用它?
我试过
eval(functionString)

返回“ Uncaught SyntaxError :意外的 token ”,并且
functionString.call(this, "HI!");

它返回“未定义不是函数”。

在javascript中甚至有可能吗?

预先感谢您的任何答复!

编辑:这个问题的重点是该函数已使用toString()转换为字符串。所以
console.log(functionString);

返回此字符串:
“功能(消息){console.log(消息);}”

我可以将字符串转换回函数并调用它吗?那就是我要解决的问题。
谢谢!

最佳答案

您的functionString完全包含字符串
"function (message) { console.log(message); }"
按原样评估它确实会为JavaScript引擎提供不正确的语法(此函数没有名称)。 JavaScript需要像function <name>(<params>) { }这样的构造。或者,您可以使用匿名函数(即不存在名称),但只能用作参数或在评估表达式的上下文中使用。最小的典型求值表达式为(function() {})()如果您想花哨的话,!function() {}也可以-前面的感叹号将其转换为 bool 表达式,需要对函数求值,然后取反输出。

因此,在您的示例中,它将起作用:
eval("("+functionString+")('abc')");
因为这样您就可以进行匿名函数调用-可以使用JavaScript。

另外,您也可以只使用方括号,然后需要将结果分配给以后可以使用的内容:

var foo = eval("("+functionString+")");
foo('ddd');

这是一个小证明/操场,以了解有关它的信息:
http://jsfiddle.net/Exceeder/ydann6b3/

09-16 11:45