调用以字符串编码的 javascript 函数
Call javascript function encoded in a string
如果我把一个函数放到这样的字符串中:
var functionString = function (message) {
console.log(message);
}.toString();
有没有办法将字符串转换回函数并调用它?我试过了
eval(functionString)
返回"未捕获的语法错误:意外令牌",以及
functionString.call(this, "HI!");
返回"未定义不是函数"。
这在javascript中可能吗?
提前感谢您的任何回复!
编辑:这个问题的重点是该函数已使用toString()转换为字符串。所以
console.log(functionString);
返回此字符串:"function (message) {console.log(message);}"
我可以将字符串转换回函数并调用它吗?这就是我试图解决的问题。谢谢!
你快到了,但你错过了一些东西。
当我们在你的函数上调用 toString() 时,我们得到
"function (message) {
console.log(message);
}"
然后我们可以评估。但是,我们只是在这里创建一个匿名函数对象;我们将无法调用它!
如果我们改为:
var functionString = "var restoredFunc = " + function (message) {
console.log(message);
}.toString();
然后我们可以执行以下操作
eval(functionString);
// prints "hello!" to console
restoredFunc("hello!");
您的functionString
正好包含字符串
"function (message) { console.log(message); }"
按原样评估它确实会呈现语法不正确的 JavaScript 引擎(此函数没有名称)。JavaScript 期望像 function <name>(<params>) { }
这样的构造。或者,您可以使用匿名函数(即不存在名称),但只能作为参数或在计算表达式的上下文中。最小的典型计算表达式是 (function() {})()
如果你想花哨,!function() {}
也可以 - 前面的感叹号将其变成布尔表达式,在否定输出之前需要函数计算。
因此,在您的示例中,这将起作用:
eval("("+functionString+")('abc')");
因为这样你就会做匿名函数调用——这是JavaScript可以接受的。
或者,您也可以只使用括号,然后您需要将结果分配给稍后可以使用的内容:
var foo = eval("("+functionString+")");
foo('ddd');
这里有一个小证明/游乐场来了解它:http://jsfiddle.net/Exceeder/ydann6b3/
是的,在JavaScript中是可能的,但是你不能在没有赋值的情况下eval
匿名函数
所以你这样经历它
var functionString = function (message) {
console.log(message);
}.toString();
eval("myfunction =" + functionString)
myfunction("Hello World!")
您的functionString
是一个看起来像
"function (message) {
console.log(message);
}"
您可以使用字符串串联将该字符串隐藏为立即调用的函数表达式 (IIFE),如下所示。
(function (message) {
console.log(message);
})("HI!");
然后评估。 以下是Chrome的JavaScript控制台的结果:
eval('(' + functionString + ')("HI!")')
HI!
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别