给定一个Javascript函数,是否可以验证该函数没有副作用;即该函数不会更改在函数范围之外声明的任何变量的值?有没有办法确定JavaScript函数是否有副作用?
4
A
回答
3
您需要为JavaScript编写效果分析,这需要JavaScript的效果语义。一些需要考虑的事项:
- 是否有副作用的代码访问原语操作? (例如,内存写入,磁盘写入,文件IO,更新任何全局状态?)
- 如果代码确实写入变量,它们是否会转义本地作用域? (即它是在ST还是IO单子?)
- 是通过共享变量完成的任何通信吗?
人们已经为不纯语言编写了类型系统来静态确定副作用是否存在。 Ben Lippmeier's thesis涵盖了很多地面。
0
如果它访问任何未在函数中定义的变量,当然它会影响任何可能具有相同名称的全局变量。
您可以查看JSLint和ADSafe并针对这些工具运行您的文件。
HTH。
相关问题
- 1. 有没有办法确定Firebase用户的UID是否有效?
- 2. 有没有办法确定neo4j数据库是否已关闭?
- 3. 有没有办法确定JDBC事务是否有效?
- 4. 有没有办法确定Java System.in是否是“交互式”?
- 5. 有没有办法确定Xcode4中未使用的函数?
- 6. 有没有办法确定stdout是否指向控制台?
- 7. 有没有办法确定输入流是否只读?
- 8. 有没有办法检查RenderScrpt是否正确绑定了rs_allocation?
- 9. 有没有办法确定Convert.ToDateTime是否添加了年份?
- 10. 有没有办法确定页面是否被压缩?
- 11. 有没有办法确定Linux PID是否暂停?
- 12. 有没有办法确定任务是否被重新分配?
- 13. 有没有办法找出JQuery .load()函数是否失败?
- 14. 有没有办法来检查一个JavaScript函数是否接受回调?
- 15. auto_detect_line_endings - 是否有副作用?
- 16. 有没有办法通过系统调用来确定STDIN是否是TTY?
- 17. Androguard有没有办法确定某个方法是否可以实际调用?
- 18. 有没有办法在VC6.0中修复“DwmEnableBlurBehindWindow”的副作用?
- 19. 有没有办法确定未使用的数据绑定
- 20. 有没有办法确定用户是否使用宽带或拨号
- 21. 有没有办法确定一年是否有Swift中的闰月?
- 22. 有没有办法确定是否有任何外围设备已被删除?
- 23. 有没有什么办法来检查VBScript函数是否被定义?
- 24. findViewById有没有副作用?
- 25. Q_UNUSED有没有副作用?
- 26. JSONP,有没有副作用?
- 27. 有没有办法确定一个站点是否在AS3中启用了HSTS?
- 28. 有没有办法确定是否安装了iPhone/iPad应用程序?
- 29. 有没有办法确定在Vim中是否已经定义了高亮区?
- 30. 有没有办法确定一个特定的Ajax是否仍在运行?
这些工具中的任何一种都测试副作用还是提供有关功能是否有副作用的信息? –
@AndersonGreen你能否详细说明副作用? JSLint测试JavaScript是否正确编写,而ADSafe检查它是否可以嵌入到包含广告的页面中,这样就不会使用全局变量等,因为它们可能会妨碍广告。 – g13n