执行使用 JavaScript eval() 创建的匿名函数
我有一个函数及其内容作为字符串。
var funcStr = "function() { alert('hello'); }";
现在,我执行 eval() 来实际在变量中获取该函数。
var func = eval(funcStr);
如果我没记错的话,在 Chrome 和 Opera 中,只需调用
func();
即可调用该函数并显示警报。
但是,在其他浏览器中情况并非如此。 什么都没发生。
我不想争论哪种方法是正确的,但我该怎么做呢? 我希望能够调用variable(); 执行存储在该变量中的函数。
I have a function and its contents as a string.
var funcStr = "function() { alert('hello'); }";
Now, I do an eval() to actually get that function in a variable.
var func = eval(funcStr);
If I remember correctly, in Chrome and Opera, simply calling
func();
invoked that function and the alert was displayed.
But, in other browsers it wasn't the case. nothing happened.
I don't want an arguement about which is the correct method, but how can I do this? I want to be able to call variable(); to execute the function stored in that variable.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
我意识到这是旧的,但它是我在谷歌搜索中评估匿名 JavaScript 函数字符串时出现的唯一有效结果。
我终于从 jquery google 组的帖子中弄清楚了如何做到这一点。
其中 data 是你的函数字符串,如“function() { return 123; }”
到目前为止,我只在 IE8 和 FF8 (我个人计算机上的浏览器)中尝试过这个,但我相信 jquery 在内部使用它,所以它应该可以工作几乎无处不在。
I realize this is old, but it was the only valid result coming up in my google searches for evaluating anonymous javascript function strings.
I finally figured out how to do it from a post on the jquery google group.
where data is your function string like "function() { return 123; }"
So far, I have only tried this in IE8 and FF8 (the browsers on my personal computer), but I believe jquery uses this internally so it should work just about everywhere.
尝试
Try
像这样使用 eval :
Use the eval like this :
我们通过准备通用函数解析器将字符串转换为真正的 JavaScript 函数来解决这个问题:
使用示例:
此处 是 jsfiddle
We solved this problem by preparing universal function parser that convert string to real JavaScript function:
examples of usage:
here is jsfiddle
这也可以。
This is also ok.
没有 eval() 的 EVAL...
用法示例:
EVAL without eval()...
Usage Example:
进行 eval() 处理,并在立即调用函数时传入参数(然后将结果转储到控制台):
一个简单的示例,将函数定义为字符串,对其
console.log('eval: %s', eval("(function(foo) { return foo.bar; })")({"bar": "12345"}));
这会产生如下所示的输出。
<代码>
评估:12345
A simple example of defining a function as a string,
eval()
ing it, and passing in a parameter while immediately invoking the function (and then dumping the result to the console):console.log('eval: %s', eval("(function(foo) { return foo.bar; })")({"bar": "12345"}));
This produces output like the following.
eval: 12345
同样有效的是
What also works is
function-serialization-tools 提供了一个函数 s2f(),它采用字符串表示形式一个函数并将其作为函数返回。
function-serialization-tools provides a function, s2f(), that takes a string representation of a function and returns it as a function.
这个怎么样?
向函数添加参数:
请注意,函数是对象,可以按原样分配给任何变量:
How about this?
To add arguments to the function:
Do note that functions are objects and can be assigned to any variable as they are:
IE 无法
eval
函数(大概是出于安全原因)。最好的解决方法是将函数放入数组中,如下所示:
IE cannot
eval
functions (Presumably for security reasons).The best workaround is to put the function in an array, like this: