給定一個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