gpt4 book ai didi

javascript - 有没有办法使用 eval() 来计算定义为字符串的函数?

转载 作者:行者123 更新时间:2023-12-03 02:18:27 26 4
gpt4 key购买 nike

我想将函数定义存储在字符串中,例如:

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 是唯一的方法。不知道还有没有其他的。

最佳答案

公平警告,eval is "evil."无论如何,我都会回答您的问题,但您可能需要重新考虑使用 eval

在 JavaScript 中,函数就是值,就像 5'Stack Overflow'document 一样。事实上,function myFunction(args) { body } 所做的就是创建一个函数并将其放入名为 myFunction* 的变量中。

假设您想获取该函数并将其放入另一个变量中。您可以直接说 var otherVariable = myFunction。如果您想调用该函数,只需说 otherVariable()

但是假设您想要一个不绑定(bind)到名称的函数,例如,如果您将其传递给另一个函数。您可以使用匿名函数,定义为 function(args) { body }。这就是您正在eval 处理的字符串内部的内容。匿名函数就像任何其他函数一样,您可以这样调用它们。实际上,您甚至可以通过在末尾添加一些括号来直接从 eval 的结果中调用它们。

不幸的是,这并不那么容易。您不能只编写一行带有匿名函数定义的代码并期望它运行:相反,您会收到一个错误,提示它没有被命名。要解决此问题,请在定义周围添加一些括号,以强制其为表达式而不是语句。

您的最终工作代码将如下所示:

var funcString = '(function(){ return 4+4 })'
var result = eval(funcString)()

当然,您永远不应该将 eval 用于这种特殊用途,但我希望您无论如何都能从这个答案中学到一些关于 JavaScript 的知识。

* 还有更多内容,例如提升,但这在本解释中并不重要。

关于javascript - 有没有办法使用 eval() 来计算定义为字符串的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com