为什么在Javascript中的严格模式下不允许使用with语句?

时间:2017-08-05 16:00:03

标签: javascript

在我的js代码文件中,当我在严格模式下使用语句时,它显示错误:

'与'在严格模式下是不允许的。

2 个答案:

答案 0 :(得分:0)

严格模式由于多种原因而不允许with语句。 Douglas Crockford在其着名的this question帖子中概述了其中一些内容:简短版本是当您在with中使用标识符时,仅通过查看代码(静态分析)是不可能的。什么会解决,因为它解决的内容取决于相关对象的内容。

考虑:

with (o1) {
    with (o2) {
        with (o3) {
            foo = "bar";
        }
    }
}

会发生什么?这个设置是o3.foo吗? o2.fooo1.foo?全球foo

这使我们人类很难或不可能推理代码,并使JavaScript引擎难以或不可能有意义地优化代码。

答案 1 :(得分:0)

建议不要使用with语句,因为它可能是令人困惑的错误和兼容性问题的根源,是否在严格模式下禁止使用 最佳实践:不要使用with语句。而是尝试使用with Statement Considered Harmful

IIFE1
您还可以查看http://2ality.com/2011/02/javascript-variable-scoping-and-its.html