有没有办法确定JavaScript函数是否有副作用

Is there a way to determine if a JavaScript function has side effects?

本文关键字:函数 是否 副作用 JavaScript 有没有      更新时间:2023-09-26

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

你需要为 JavaScript 编写一个效果分析,这将需要 JavaScript 的效果语义。需要考虑的一些事项:

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

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

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

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

http://www.jslint.com/

http://www.adsafe.org/

呵。