2 分钟讲解 JavaScript 的 `use strict`

2025-06-08

2 分钟讲解 JavaScript 的 `use strict`

JavaScript 在解释方式上非常宽松。例如:

x = 5;
Enter fullscreen mode Exit fullscreen mode

不是有效的 JavaScript 代码,应该写为var x = 5(或ES6 中的const/ let),但 JavaScript 解释器仍然允许这样做并且不会出现任何错误。

简单来说,一般来说,正常的 JavaScript 允许编写糟糕的代码并包含错误的语法。

use strict解决了这个问题

该指令是在 ES5 中引入的,use strict它提供了一种方法来告诉解释器将编写错误的 JavaScript 转换为错误。

这迫使开发人员编写更简洁、更有条理、更易读的代码。事实上,use strict许多著名的 JavaScript 库(例如ReactJSjQuery等)都使用了 JavaScript。

用线写成"use strict";

下面这行用于use strict在当前函数范围内启用。

"use strict";

// strict code here
Enter fullscreen mode Exit fullscreen mode

在特定函数中的使用use strict如下所示:

function myFunc(){
    "use strict";

    // strict code here
}
Enter fullscreen mode Exit fullscreen mode

一般不会在全局范围内使用,因为严格的代码会阻止全局变量(稍后详细说明)。

相反,通常的做法是use strict在 JavaScript IIFE(立即调用函数表达式)中使用,如下所示:

// non-strict code here

(function(){
    "use strict";

    // strict code here
})();

// non-strict code here
Enter fullscreen mode Exit fullscreen mode

"use strict";行是一个 JavaScript 文字表达式,不支持它的 JavaScript 版本会忽略它。

use strict所有主流浏览器都支持(请参阅CanIUse Data)。

请考虑以下示例:

非严格代码示例

是非严格的代码,并会产生几个潜在的问题:

  • 创建一个没有正确声明var(或ES6 中的let/ )的变量const
  • 创建全局变量,这可能会导致代码不整洁或难以维护
  • 使用delete关键字删除变量,而不是让 JavaScript 的垃圾收集器自动执行此操作。

使用use strict强制代码写得更像这样:

严格代码示例

什么可以use strict阻止

下面简要列出了严格模式的主要特性:

  • 强制正确声明变量(例如x = 1;
  • 防止全局变量
  • 阻止重复的对象属性名称(例如var obj = {p1: 5, p1: 7, p2: 9};
  • 阻止对不可写的全局变量进行赋值(例如undefined = 1;
  • 防止使用八进制数(例如var x = 0o144;

这不是完整列表,您可以use strict使用严格 MDN Web 文档页面中阅读有关确切功能的更多信息。

我希望您喜欢这篇文章并发现use strict它将来可能会有用。

感谢您的浏览。

——加布里埃尔·罗穆阿尔多,2020 年 1 月 17 日

鏂囩珷鏉ユ簮锛�https://dev.to/gaberomualdo/javascript-use-strict-explained-in-2-minutes-40oo
PREV
我从一本 20 年前的网页设计书籍中学到的东西
NEXT
我创建了每日开发者笑话和第一个 DEV Bot