Javascript Eval 和 Function 构造函数的使用

标签 javascript

我目前正在试验 self 复制代码。出于对这门语言的热爱,我想用 javascript 编写它。

我正在开发一个程序,该程序编写一个函数的代码,该函数又编写其函数自己的代码,依此类推。基本上,所需的过程是这样的:

  1. 我手动创建一个函数,该函数返回代码(包括一些随机性)和数值(建议的问题解决方案)。
  2. 我多次调用此函数,评估每个返回函数的结果,然后继续该过程,直到获得足够适合我想要执行的操作的代码。

现在,我总是被告知如何 eval is evil , 如何never to use it等等。然而,对于我的特定用例,函数构造函数或 eval 似乎正是我正在寻找的。

所以,简而言之,问题是:

eval/Function 构造函数确实是我的情况下使用的最佳工具吗?如果是这样,我想我应该使用 Function 构造函数来限制执行的代码的范围,但是有没有办法真正限制它访问全局范围?另外,在我的案例中,评估使用有哪些好的做法?

最佳答案

我想我刚刚找到了一些我可以使用的东西:

如果我使用 node.js 运行我的 javascript 代码,我可以使用 vm模块允许我在新的上下文中安全地执行 javascript 代码,并且不允许执行的代码对本地或全局范围进行任何访问。

vm.runInNewContext compiles code, then runs it in sandbox and returns the result. Running code does not have access to local scope. The object sandbox will be used as the global object for code. sandbox and filename are optional, filename is only used in stack traces.

您可以在此处查看完整示例:vm.runInNewContext

这将使我能够安全地评估代码,并且似乎是(我发现)当前可用的最安全的方法。我认为这是比 eval 或调用 Function 构造函数更好的解决方案。

感谢所有提供帮助的人。

关于Javascript Eval 和 Function 构造函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892791/

相关文章:

javascript - 如何使用 javascript 在 HTML 列表中显示和隐藏超链接

javascript - 取消绑定(bind) jQuery Click 事件并不总是有效

javascript - Node 调度-tz : Issue with timezone

javascript - 使用 Google 跟踪代码管理器自定义维度

javascript - span 没有附加到父级 div

javascript - Jest - 测试给出错误 TypeError : Cannot read property 'then' of undefined

javascript - 带有可选参数的 Typescript 构建 URL

javascript - Fullcalendar 在拖放时复制事件

javascript - 如何使用 Typeahead.js 0.10 一步一步/远程/预取/本地

javascript - ajax结果成功 null