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

时间:2012-11-21 05:47:50

标签: javascript ecmascript-5

  

可能重复:
  What does “use strict” do in JavaScript, and what is the reasoning behind it?

实际上,我知道use strict在JavaScript中的作用,这里提出的问题是: What does "use strict" do in JavaScript, and what is the reasoning behind it?

但我无法理解为什么我们应该在JavaScript库中使用strict模式?我的意思是使用它有什么好处?

1 个答案:

答案 0 :(得分:6)

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

让我只提出其中一个:The Horror of Implicit Globals¹

非严格代码:

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的全局变量。为什么?因为我的代码中有拼写错误(我在设置为v时错过了myvar中的a * 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工具无法完成的操作,例如禁止with,更改未设置它的函数调用中的this的默认值等。


¹(这是我贫血的小博客上的帖子)