为什么在JavaScript库中使用`strict mode`?

Afs*_*ani 14 javascript ecmascript-5

可能重复:
JavaScript中"use strict"是做什么的,背后的原因是什么?

实际上我知道use strictJavaScript中的问题是这里提出的问题:JavaScript
中"use strict"是做什么的,背后的原因是什么?

但我不明白为什么我们应该strict在JavaScript库中使用模式?我的意思是使用它有什么好处?

T.J*_*der 7

您链接的问题,其答案以及其中给出的参考文献列出了使用严格模式的一系列原因.

让我只提出其中一个:隐含全球的恐怖

非严格的代码:

function foo(a) {
    var myvar;

    myar = a * 4;

    // ...

    return myvar;
}
Run Code Online (Sandbox Code Playgroud)

现在,这段代码:

console.log(foo(2));
Run Code Online (Sandbox Code Playgroud)

......应该记录"8",对吗?但事实并非如此,它始终记录为"未定义":

function foo(a) {
    var myvar;

    myar = a * 4;

    // ...

    return myvar;
}
console.log(foo(2));
Run Code Online (Sandbox Code Playgroud)

更重要的是,它默默地创建一个名为的全局变量myar.为什么?因为我的代码中有一个拼写错误(我vmyvar设置它时错过了a * 4).

与之比较:

function foo(a) {
    "use strict";
    var myvar;

    myar = a * 4;

    // ...

    return myvar;
}
console.log(foo(2));
Run Code Online (Sandbox Code Playgroud)

现在,我得到一个很好的错误消息,而不是一个奇怪的返回值和一个全局变量. ReferenceError: "myar" is not defined

现在,严格模式的特定方面可以使用lint工具来完成.但是,当您只是尝试修复某些内容并在编辑器和浏览器之间进行弹跳时,您并不总是在您的愤怒编码工具链中使用lint工具.所以当浏览器帮助你时,这很好.

另外,严格模式执行lint工具无法完成的操作,例如禁止with,更改this未设置它的函数调用的默认值等.