-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表达式的局部范围内的语句?
谢谢你明确的答案。我也阅读了这篇文章,这更清晰。 –