24

可能重复:
“use strict”在 JavaScript 中做了什么,其背后的原因是什么?

实际上,我知道use strictJavaScript 在 JavaScript 中的作用是
什么:“use strict”在 JavaScript 中做了什么,其背后的原因是什么?

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

4

1 回答 1

8

您链接的问题、它的答案以及它提供的参考资料列出了使用严格模式的一系列原因。

让我只说其中一个:隐式全局变量的恐怖¹

非严格代码:

function foo(a) {
    var myvar;

    myar = a * 4;

    // ...

    return myvar;
}

现在,这段代码:

console.log(foo(2));

...应该记录“8”,对吗?但它没有,它总是记录“未定义”:

function foo(a) {
    var myvar;

    myar = a * 4;

    // ...

    return myvar;
}
console.log(foo(2));

更重要的是,它默默地创建了一个名为myar. 为什么?因为我的代码中有错字(我在将其设置为 时错过了vin )。myvara * 4

与之比较:

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

    myar = a * 4;

    // ...

    return myvar;
}
console.log(foo(2));

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

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

另外,严格模式执行 lint 工具无法完成的事情,例如 disallowing 、更改未设置它的函数调用with的默认值等。this


¹ (这是我贫血的小博客上的一篇文章)

于 2012-11-21T06:08:03.307 回答