是否可以使用“严格使用”;有条件的,当你说你在开发环境中?

时间:2014-07-14 15:48:19

标签: javascript ecmascript-5

(来自chrome的所有示例) 这不起作用:

if (InDevEnvironment) {
    "use strict";
    undeclaredVar = 1;
}
undeclaredVar2 = 1;

即,严格模式不适用,并且两个未声明的变量都未设置为全局

然而这有效:

"use strict";
undeclaredVar = 1;
undeclaredVar2 = 1;

即,应用严格模式,两行都会生成错误

问题 - 是否有一种方法可以应用严格模式,具体取决于某些条件JavaScript语句?

1 个答案:

答案 0 :(得分:3)

  

是否有一种方法可以应用严格模式,具体取决于某些条件JavaScript语句

合理,不。有一些不合理的方法可以做到这一点(在我的脑海中:使用ajax加载脚本并在顶部添加/不添加"use strict";,然后将其放入{{ 1}}元素并将元素添加到页面中。

但如果你能避免它,我就不会这样做。没有特别好的理由将其移除,只需将其留在那里。如果代码已经清除了开发和测试,那么在生产中使用它不应该是一个问题,如果一个错误滑过开发和测试,可能会给你重要的,省时的信息。 (客户支持客户:"它已损坏"支持客户:"按F12并点击控制台,你看到任何红色的东西吗?"客户支持:&# 34;它说script ......" - 结果!)


您的问题专门询问了如何使用JavaScript变量来执行此操作,但您可以非常轻松地使用JavaScript变量而不是。例如,您可以使用脚本minifier / combiner来执行此操作:

ReferenceError用于函数和代码编译单元级别,"use strict"必须是单元中的first non-comment。所以这是严格的代码:

"use strict"

这是不是严格代码:

"use strict";
doSomethingCool();

第二个例子中的doSomethingCool(); "use strict"; /* This would not be strict code here */ 只是一个死表达式,它没有效果。

因此,在您的模块中,当您将它们迁移到严格模式时,可以将"use strict"添加到模块的顶部,然后让您的脚本组合器在前面添加合并和缩小时。这具有禁用该声明的效果。由于您可能不使用脚本组合器/缩放器(而是直接加载模块),因此将在开发中启用严格模式,但不生成。