(所有示例均来自 chrome) 这不起作用:
if (InDevEnvironment) {
"use strict";
undeclaredVar = 1;
}
undeclaredVar2 = 1;
即,不适用严格模式,并且两个未声明的变量都不会设置为全局
但是这有效:
"use strict";
undeclaredVar = 1;
undeclaredVar2 = 1;
即,应用严格模式,两行都会生成错误
问题 - 有没有办法根据某些条件 JavaScript 语句应用严格模式?
最佳答案
is there a way to apply strict mode, depending on some conditional JavaScript statement
不合理,不。有一些不合理的方法来做到这一点(我的想法是:使用ajax加载脚本并在顶部添加/不添加“use strict”;
在将其放入 script
元素并将该元素添加到页面之前)。
但如果你能避免的话我不会。没有特别好的理由将其删除,只需将其留在那里即可。如果代码已经通过了开发和测试,那么在生产中使用它应该不是问题,并且如果错误错过了开发和测试,很可能会为您提供重要的、节省时间的信息。 (客户对客户支持:“它坏了” 对客户支持:“按 F12 并单击控制台,您看到红色的东西了吗?” 客户对支持:“它说 ReferenceError
...”--结果!)
您的问题特别询问了如何使用 JavaScript 变量来执行此操作,但您可以使用 JavaScript 变量非常轻松地执行此操作。例如,您可以使用脚本压缩器/组合器来执行此操作:
“use strict”
在函数和代码编译单元级别工作,并且 “use strict”
必须是 first non-comment在单位。所以这是严格的代码:
"use strict";
doSomethingCool();
这是不严格的代码:
doSomethingCool();
"use strict";
/* This would not be strict code here */
第二个示例中的“use strict”
只是一个死表达式,没有任何效果。
因此,在您的模块中,当您将它们迁移到严格模式时,您可以将 "use strict";
添加到模块的顶部,然后让您的脚本组合器添加一些内容组合和缩小时的前面。这具有禁用该语句的效果。由于您可能不使用脚本组合器/压缩器(而是直接加载模块),因此将在开发中启用严格模式,但在生产中不会启用。
关于javascript - 是否可以使用 "use strict";有条件的话,什么时候说你处于开发环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24740532/