【问题标题】:Why using `strict mode` in JavaScript libraries? [duplicate]为什么在 JavaScript 库中使用“严格模式”? [复制]
【发布时间】:2012-11-09 08:12:46
【问题描述】:

可能重复:
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 模式?我的意思是使用它有什么好处?

【问题讨论】:

  • 您的答案已经 [here on SO][1]。 [1]:stackoverflow.com/questions/1335851/…
  • 在库中使用它的原因与一般使用它的原因相同,如您的问题中所链接。为什么你认为仅仅因为它是库代码就有区别?
  • 我投票决定关闭为重复,因为我没有看到这里的答案与已经给出的答案有任何不同或更清晰。
  • @T.J.Crowder 但我无法理解它的一般用法。我说是在图书馆里,因为我在jQuery 中看到过,没有更多。
  • @AfshinMehrabani:在阅读了您链接的问题及其答案和参考资料后,您无法理解使用严格模式的好处?也许您可以就列出的众多好处之一提出一个具体问题,以及为什么您不明白这一点?

标签: javascript ecmascript-5


【解决方案1】:

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

让我只说出其中一个: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 的全局变量。为什么?因为我的代码中有错字(我在将myvar 设置为a * 4 时错过了v)。

比较:

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 的默认值等。


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

【讨论】:

  • @AfshinMehrabani:很酷,很高兴有帮助!
猜你喜欢
  • 2018-07-19
  • 2013-05-15
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2019-10-16
  • 2019-11-14
  • 2012-04-18
  • 2022-12-22
相关资源
最近更新 更多