(来自chrome的所有示例) 这不起作用:
if (InDevEnvironment) {
"use strict";
undeclaredVar = 1;
}
undeclaredVar2 = 1;
即,严格模式不适用,并且两个未声明的变量都未设置为全局
然而这有效:
"use strict";
undeclaredVar = 1;
undeclaredVar2 = 1;
即,应用严格模式,两行都会生成错误
问题 - 是否有一种方法可以应用严格模式,具体取决于某些条件JavaScript语句?
答案 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"
添加到模块的顶部,然后让您的脚本组合器在前面添加的合并和缩小时。这具有禁用该声明的效果。由于您可能不使用脚本组合器/缩放器(而是直接加载模块),因此将在开发中启用严格模式,但不生成。