最近,我通过克罗福德 查了一些JavaScript代码JSLint JSLint,并给出了以下错误:
第1行第1字符1:缺少“严格使用”声明的问题。
在做一些搜索时,我意识到有些人加了"use strict";
输入 JavaScript 代码。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并未披露此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读 JavaScript 有关, 但我不知道效果会是什么 。
那么,什么是"use strict";
关于它的意义是什么,它是否仍然相关?
当前浏览器中的任意浏览器响应"use strict";
字符串, 还是用于未来用途 ?
更新ES6模块的更新
内ECMAScript 本地 ECMAScript 模块(与import
和export
和 报表)和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 中使用(因此命名? )它可以帮助您减少错误, 通过检测更多可能导致破碎的东西。
严格模式为现在由所有主要浏览器支持.
JavaScript由于浏览器战争和管理不善而匆忙设计和实施,导致许多设计决定不善,不直观的语法和混乱的语义被混为一谈。 严格模式旨在修正其中的一些错误。
但是,在不创造替代解释的情况下纠正这些错误会打破后向兼容性。所以,"use strict"
指令规定对代码的替代解释,同时将其告知程序员。
例如,this
关键字在方法定义中指向对象,例如this
或self
以其他语文提供。
let o = {
name: 'John Doe',
sayName: function(){
console.log(this.name);
}
};
o.sayName(); // 'John Doe'
this
方法上下文外没有目的,但所有 JavaScript 函数都具有this
关键字是否为方法 :
function run() {
console.log(this);
}
run(); // Window
给this
确定全球对象,因为全球对象在范围中已经存在,所以它毫无意义,没有意义。
严格方式this
在一个全球职能中,我们决心作出不确定的决定,这正是我们所期望的。
"use strict"
function run() {
console.log(this);
}
run(); // undefined
有些错误即使严格的方式也无法固定,因为语法对旧浏览器应该有效,因为它们忽略了"strict mode"
这是按设计设计的指令。