-1
A
回答
0
由於幾個原因,嚴格模式不允許使用with
語句。其中一些由道格拉斯克羅克福德在其着名的with Statement Considered Harmful文章中概述:簡短的版本是,當你在with
中使用標識符時,不可能僅僅通過查看代碼(靜態分析)來判斷將解決什麼,因爲什麼它的解決取決於所討論的對象的內容。
考慮:
with (o1) {
with (o2) {
with (o3) {
foo = "bar";
}
}
}
會發生什麼?那個設置是o3.foo
? o2.foo
? o1.foo
?全球foo
?
這使我們人類很難或不可能推斷代碼,並且使JavaScript引擎難以或不可能有意義地優化代碼。
0
不建議使用with語句,因爲它可能是令人困惑的錯誤和兼容性問題的根源,嚴格模式下是禁止的
最佳實踐:不要使用with語句。而不是嘗試使用IIFE
1:http://2ality.com/2011/02/javascript-variable-scoping-and-its.html
你也可以看看JavaScript’s with statement and why it’s deprecated
相關問題
- 1. 嚴格模式下不允許使用八進制文字
- 2. 爲什麼Cassandra不允許在更新語句中使用udf?
- 3. 在嚴格模式下不允許分配只讀屬性IE11
- 4. 爲什麼在「使用」綁定中不允許模式?
- 5. 無法修復:SyntaxError:嚴格模式不允許在詞法嵌套語句中使用函數聲明
- 6. 爲什麼JavaScript允許在條件語句中使用&&(邏輯)和&(按位)?
- 7. 爲什麼JavaScript在return語句後允許函數聲明?
- 8. 爲什麼GCC在嚴格模式下不使用內建函數?
- 9. 使用JavaScript不能在嚴格模式下設置CSS屬性?
- 10. 爲什麼switch-case語句在Equality-Comparable類上不允許?
- 11. SyntaxError:'with'語句在嚴格模式下無效
- 12. 爲什麼C#允許語句之後的語句但不在它之前?
- 13. 爲什麼在選項嚴格的情況下允許從Double到Single分配
- 14. PHPUnit - 爲什麼PHPUnit似乎在嚴格模式下運行?
- 15. Angular 2/4:在嚴格模式下不允許多個屬性的定義
- 16. React Native:嚴格模式不允許在詞法嵌套語句中的函數聲明
- 17. 屬性的多個定義不允許嚴格模式
- 18. 爲什麼後裔或自我::不允許在模板模式?
- 19. 爲什麼java.lang.Class.newInstance0()在java內存模型下嚴格不正確?
- 20. 什麼可能導致Javascript在嚴格模式下停止在IE中工作
- 21. PHPUnit嚴格模式有什麼作用?
- 22. 爲什麼swift不允許嵌套if語句和其他語句?
- 23. 爲什麼在Swift 2.2的AnyObject上不允許使用下標?
- 24. 爲什麼C++不允許使用typeof?
- 25. 是否有理由不在JavaScript中使用嚴格模式?
- 26. 做javascript switch語句case允許使用表達式
- 27. 爲什麼模板定義中不允許使用結構體?
- 28. 爲什麼在HTML/XHTML嚴格中允許輸入大小屬性?
- 29. 爲什麼樣式表列不允許?
- 30. 爲什麼Python不允許lambda表達式的局部範圍內的語句?
謝謝你明確的答案。我也閱讀了這篇文章,這更清晰。 –