“use strict”在 JavaScript 中做了什么,背后的原因是什么?

问题描述

ES6 模块更新

原生 ECMAScript 模块(withimportexport语句)和ES6 类中,严格模式始终处于启用状态且无法禁用。

原始答案

您可能会对这篇关于 Javascript 严格模式的文章感兴趣:John Resig - ECMAScript 5 严格模式、JSON 等

引用一些有趣的部分:

严格模式是 ECMAScript 5 中的一项新功能,它允许您将程序或函数置于“严格”操作上下文中。这种严格的上下文会阻止执行某些操作并引发更多异常。

和:

严格模式有几个方面的帮助:

  • 它捕获一些常见的编码错误,抛出异常。
  • 当采取相对“不安全”的操作(例如获得对全局对象的访问权)时,它可以防止或引发错误
  • 它禁用了令人困惑或考虑不周的功能

另请注意,您可以将“严格模式”应用于整个文件......或者您只能将其用于特定功能(仍然引用 John Resig 的文章

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code...

如果您必须混合旧代码和新代码,这可能会有所帮助;-)

所以,我想它有点像"use strict"你可以在 Perl 中使用的(因此得名?):它通过检测更多可能导致损坏的东西来帮助你减少错误

现在所有主要浏览器都支持严格模式。

解决方法

最近,我通过 Crockford 的JSLint运行了一些 JavaScript 代码,它给出了以下错误:

第 1 行字符 1 的问题:缺少“use strict”语句。

做了一些搜索,我意识到有些人添加"use strict";到他们的 JavaScript 代码中。一旦我添加了语句,错误就停止出现了。不幸的是,谷歌没有透露这个字符串声明背后的大部分历史。当然,这一定与浏览器如何解释 JavaScript 有关,但我不知道会产生什么影响。

那么到底是"use strict";什么,它意味着什么,它仍然相关吗?

当前的浏览器是否响应该"use strict";字符串或是否供将来使用?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...