如果我将函数放入这样的字符串中:
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/