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

时间:2012-05-19 05:07:34

标签: javascript function functional-programming scope side-effects

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

2 个答案:

答案 0 :(得分:3)

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

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

人们已经为不纯语言编写了类型系统,以静态确定是否存在副作用。 Ben Lippmeier's thesis涵盖了很多方面。

答案 1 :(得分:0)

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

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

http://www.jslint.com/

http://www.adsafe.org/

HTH。