Javascript 是否可以使用;使用“严格”;;有条件地说,当您处于开发环境中时?

Javascript 是否可以使用;使用“严格”;;有条件地说,当您处于开发环境中时?,javascript,ecmascript-5,Javascript,Ecmascript 5,(所有示例均来自chrome) 这不起作用: if (InDevEnvironment) { "use strict"; undeclaredVar = 1; } undeclaredVar2 = 1; 也就是说,严格模式不适用,两个未声明的变量都未设置为全局变量 然而,这是可行的: "use strict"; undeclaredVar = 1; undeclaredVar2 = 1; 即,应用严格模式,两行都将生成错误 问题-根据一些条件JavaScript语句,是否有方

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

if (InDevEnvironment) {
    "use strict";
    undeclaredVar = 1;
}
undeclaredVar2 = 1;
也就是说,严格模式不适用,两个未声明的变量都未设置为全局变量

然而,这是可行的:

"use strict";
undeclaredVar = 1;
undeclaredVar2 = 1;
即,应用严格模式,两行都将生成错误

问题-根据一些条件JavaScript语句,是否有方法应用严格模式

有没有一种方法可以根据一些条件JavaScript语句应用严格模式

不合理,没有。有一些不合理的方法可以做到这一点(在我的脑海中:使用ajax加载脚本并添加/不添加
“使用严格”;
在顶部,然后将其放入
脚本
元素并将该元素添加到页面)

但如果你能避免的话,我不会。没有特别好的理由移除它,就让它留在那里吧。如果代码已经通过了开发和测试,那么在生产中使用它不应该是一个问题,如果一个bug通过了开发和测试,它可能会为您提供重要的、节省时间的信息。(客户对客户支持:“它坏了”客户支持:“按F12并单击Console,您是否看到红色的内容?”客户支持:“它显示
ReferenceError
…”——结果!)


您的问题特别询问了如何使用JavaScript变量来实现这一点,但使用JavaScript变量并不容易。例如,您可以使用脚本缩小器/组合器来执行此操作:

“use strict”
工作于函数和代码编译单元级别,并且
“use strict”
必须是单元中的。所以这是严格的代码:

"use strict";
doSomethingCool();
doSomethingCool();
"use strict";
/* This would not be strict code here */
这不是严格的代码:

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


因此,在您的模块中,当您将它们迁移到严格模式时,您可以添加
“use strict”添加到模块顶部,然后让脚本组合器在组合和缩小时在前面添加一些内容。这具有禁用语句的效果。由于您可能不使用脚本组合器/缩微器(而是直接加载模块),因此在开发中启用严格模式,但在生产中不启用。

为什么不启用它?你会生产得更好code@DanielA.White因为保持它打开,可能会产生ERORR,而不是工作代码。因此,如果您试图开始对一个数千行的项目应用严格模式,您需要谨慎地执行。他们建议将其包装在一个函数中并执行该函数,而不是将其放在顶层。@GregBala:如果您编写模块化代码,您可以将
“use strict”
指令限制为模块。我知道@FelixKling。但我想将其应用于现有的大型模块,这些模块在发布之前无法完全测试。至少在dev中,我可以慢慢解决问题