4

给定一个 Javascript 函数,是否可以验证该函数没有副作用;即,该函数不会更改在函数范围之外声明的任何变量的值?

4

2 回答 2

4

您需要为 JavaScript 编写效果分析,这需要 JavaScript 的效果语义。一些需要考虑的事情:

  • 代码是否访问具有副作用的原始操作?(例如内存写入、磁盘写入、文件 IO、更新任何全局状态?)
  • 如果代码确实写入变量,它们是否会逃脱本地范围?(即它是在 ST 还是 IO monad 中?)
  • 是否通过共享变量进行任何通信?

人们已经为不纯的语言编写了类型系统来静态确定是否存在副作用。Ben Lippmeier 的论文涵盖了很多领域。

于 2012-05-19T05:29:00.987 回答
-1

如果它访问任何未在函数中定义的变量,当然它会影响任何可能具有相同名称的全局变量。

您可以查看 JSLint 和 ADSafe 并针对这些工具运行您的文件。

http://www.jslint.com/

http://www.adsafe.org/

HTH。

于 2012-05-19T05:16:20.087 回答