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

4

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

2个回答

4
你需要为JavaScript编写一个效果分析,这需要一个JavaScript的效果语义。需要考虑以下几点:
  • 代码是否访问具有副作用的基本操作?(例如内存写入、磁盘写入、文件IO、更新任何全局状态?)
  • 如果代码确实写入变量,它们是否逃逸本地作用域?(即它是否在ST或IO单子中?)
  • 是否通过共享变量进行任何通信?
人们已经为不纯粹的语言编写了类型系统,以静态确定是否存在副作用。 Ben Lippmeier's thesis涵盖了很多内容。

-2

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

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

http://www.jslint.com/

http://www.adsafe.org/

HTH.


这两个工具是否测试副作用或提供有关函数是否具有副作用的信息? - Anderson Green
@AndersonGreen,你能详细说明一下副作用吗?JSLint测试JavaScript是否编写正确,而ADSafe检查它是否可以嵌入到带有广告的页面中,以便您不使用全局变量等,因为它们可能会干扰广告。 - g13n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接