最近,我通过克罗福德 查了一些JavaScript代码JSLint JSLint,并给出了以下错误:
第1行第1字符1:缺少“严格使用”声明的问题。
在做一些搜索时,我意识到有些人加了"use strict";
输入 JavaScript 代码。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并未披露此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读 JavaScript 有关, 但我不知道效果会是什么 。
那么,什么是"use strict";
关于它的意义是什么,它是否仍然相关?
当前浏览器中的任意浏览器响应"use strict";
字符串, 还是用于未来用途 ?
ECMAScript 5采用了JavaScript“严格”模式。
(function() {
"use strict";
your code...
})();
书写"use strict";
在您的 JS 文件的顶端, 打开严格的语法检查 。 它为我们执行以下任务 :
如果您试图指定给一个未声明的变量,则显示错误。
停止您覆盖关键 JS 系统库
禁止某些不安全或容易出错的语言特征
use strict
也属于个别职能内的工作。use strict
在你的代码。
浏览器兼容性问题 : “ 使用” 指令意在向后兼容。 不支持这些指令的浏览器将只看到一个字符串字典, 但没有进一步引用。 因此, 他们将会通过它继续前进 。
严格模式可以防止内存泄漏。
请检查以下以非限制模式写入的函数 :
function getname(){
name = "Stack Overflow"; // Not using var keyword
return name;
}
getname();
console.log(name); // Stack Overflow
在此函数中, 我们正在使用一个变量, 名为name
函数 内 函数 。 内部 汇编器将首先检查在该特定函数范围中是否有以该特定名称宣布的变量。 由于编辑器了解不存在该变量, 它将在外部范围中检查。 在我们的案例中, 它就是全球范围 。 同样的, 汇编器理解全球空间中也没有以该名称宣布的变量, 因此它会在全球空间中为我们创建这样一个变量。 从概念上讲, 该变量将创建在全球范围内, 并将在整个应用程序中提供 。
另一个假想是,比如,变量在子函数中被声明为子函数。 在这种情况下, 编译者检查该变量在外部范围的有效性, 即父函数。 只有这样, 它才能在全球空间中检查并创建变量。 这意味着需要做更多的检查。 这将影响应用程序的性能 。
现在让我们在严格模式下写入相同的函数 。
"use strict"
function getname(){
name = "Stack Overflow"; // Not using var keyword
return name;
}
getname();
console.log(name);
我们会得到以下错误。
Uncaught ReferenceError: name is not defined
at getname (<anonymous>:3:15)
at <anonymous>:6:5
在此, 编译器会丢弃引用错误。 在严格模式下, 编译器不允许我们使用变量而不声明它。 这样可以防止内存泄漏。 此外, 我们可以写入更优化的代码 。
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"
这是按设计设计的指令。