我想将函数定义存储在字符串中,例如:
var funcString = 'function(){ return 4+4 }'
我可以使用eval()来评估函数吗?
例如:
var result = eval(funcString)
将funcString中的字符串作为函数进行计算,并在结果中返回4 + 4(8)。
编辑:所以你从我告诉我的内容中了解到我不应该以这种方式使用eval,但对于我的情况,我不认为还有另一种方式。
我想在一个单独的文件中定义一组规则,我想指示我的Javascript库查看此文件并搜索规则。以下是规则的示例:
rule('logOut', (function() { return !JSLibrary.compareUserDetails })(), (function() { console.log("\n\nError: logged out user did not match\n\n\n") })())
我想评估规则中定义的两个函数,我认为eval是唯一的方法。我不知道是否还有其他人。
答案 0 :(得分:1)
公平警告,eval
is "evil."我会回答您的问题,但您可能需要重新考虑使用PerHourRate
。
在JavaScript中,函数是值,就像eval
,5
和'Stack Overflow'
一样。事实上,document
所做的是创建一个函数并将其抛入一个名为function myFunction(args) { body }
*的变量中。
假设您想要使用该功能并将其放入另一个变量中。你可以说myFunction
。如果你想调用该函数,你可以说var otherVariable = myFunction
。
但是假设您想要一个不与名称绑定的函数,例如,如果您将其传递给另一个函数。您可以使用匿名函数,定义为otherVariable()
。这就是你所在的function(args) { body }
- 字符串中的内容。匿名函数就像任何其他函数一样,您可以这样调用它们。实际上,您甚至可以在eval
的结果中通过最后添加一些括号来调用它们。
不幸的是,它并不那么容易。您不能只使用匿名函数定义编写一行代码并期望它运行:您将收到一个错误,抱怨它没有被命名。要解决此问题,请在定义周围添加一些括号,以强制它为表达式而不是语句。
您的最终工作代码如下所示:
eval
当然,你不应该使用var funcString = '(function(){ return 4+4 })'
var result = eval(funcString)()
来实现这一特定用途,但我希望你能从这个答案中学到一些关于JavaScript的知识。
*还有更多的东西,比如吊装,但这在解释中并不重要。
答案 1 :(得分:0)
使用immediately invoked function expression可以使用eval调用函数。
document.body.innerHTML = eval('(function(){return 4+4;})()');

警告:不要这样做:它不安全,性能杀手,难以阅读/理解等等