ChatGPT解决这个技术问题 Extra ChatGPT

Node.js 中的“use strict”语句是如何解释的? [复制]

这个问题在这里已经有了答案:“use strict”在 JavaScript 中做了什么,背后的原因是什么? (30 个回答) 8 年前关闭。

我开始探索Node.js,写了很多demo web application,了解Node.js、Express.js、jade等的流程。

但是我最近遇到的一件事是语句 "use strict" 作为每个函数和每个 .js 文件中的第一行。

Node.js 究竟是如何解释的?

这不是重复的......我真的不知道 JavaScript ......以及它是否存在于 JavaScript 中。会有一些差异..对吗?所以请给一些关于node.js的理解
@GoloRoden 虽然我避免在文件范围内使用它,但 MDN 表示它在设置 'use strict'; 文件范围时按预期工作。当您将 non-strict 与 strict 文件连接在一起时,或者当您在 HTML 页面的内联脚本标记(Node 没有)内设置 use strict 时,就会出现问题。
确切地。然而,Web 浏览器和 Node.js 之间还是有区别的:在一种情况下你应该考虑它,在另一种情况下你不需要。 (我关于讽刺的评论与你无关,顺便说一句)
正如您已经说过的:连接所有脚本文件时可能会出现问题。因此,我认为这是不行的,并且根据经验,建议您始终将代码包装在立即执行的函数中(无论如何,出于各种其他原因,这是一个好主意)。在 Node.js 中,这根本不是必需的。
我不确定这是重复的。这个问题有助于我理解 node.js 使用与 Chrome 浏览器相同的引擎进行解释。没有这些知识,如何应用“使用严格”的清晰度有限。

C
Community

"use strict";

基本上它启用了严格模式。

严格模式是一种允许您将程序或功能置于“严格”操作环境中的功能。在严格的操作上下文中,方法形式像以前一样将 this 绑定到对象。函数形式将 this 绑定到 undefined,而不是全局 set 对象。

根据您的评论,您会说会有一些差异。但这是你的假设。 Node.js 代码不过是您的 JavaScript 代码。 V8 JavaScript engine 解释所有 Node.js 代码。 V8 JavaScript 引擎 是谷歌为 Chrome 网络浏览器开发的开源 JavaScript 引擎。

因此,Chrome 浏览器和 Node.js 对 "use strict"; 的解释方式没有太大区别。

请阅读 JavaScript 中的严格模式是什么。

了解更多信息:

严格模式 ECMAScript 5 浏览器中的严格模式支持 严格模式即将问世 严格模式的兼容性表 Stack Overflow 问题:“使用严格”在 JavaScript 中的作用及其背后的原因是什么

ECMAScript 6:

ECMAScript 6 代码 &严格模式。以下是简短的 from the specification

10.2.1 严格模式代码 ECMAScript 脚本语法单元可以使用不受限制或严格模式语法和语义来处理。在以下情况下,代码被解释为严格模式代码: 如果全局代码以包含使用严格指令的指令序言开头(参见 14.1.1),则它是严格模式代码。模块代码始终是严格模式代码。 ClassDeclaration 或 ClassExpression 的所有部分都是严格模式代码。如果 Eval 代码以包含 Use Strict 指令的 Directive Prologue 开头,或者如果对 eval 的调用是包含在严格模式代码中的直接 eval(参见 12.3.4.1),则它是严格模式代码。如果相关的 FunctionDeclaration、FunctionExpression、GeneratorDeclaration、GeneratorExpression、MethodDefinition 或 ArrowFunction 包含在严格模式代码中,或者如果生成函数 [[ECMAScriptCode]] 内部槽值的代码以指令序言开头,则函数代码是严格模式代码包含使用严格指令。如果最后一个参数是一个字符串,作为参数提供给内置函数和生成器构造函数的函数代码是一个严格模式代码,该字符串在处理时是一个以包含使用严格指令的指令序言开头的 FunctionBody。

此外,如果您不知道当前版本的 Node.js 支持哪些功能,此 node.green 可以为您提供帮助(利用与 kangax 相同的数据)。


首先,Chrome 并不是地球上唯一的浏览器。只是 Node.js 和 Chrome 使用 V8,并不一定意味着它在所有浏览器中的工作方式都相同。其次,加载文件(也称为模块)的方式有所不同。第三,浏览器的脚本通常会连接起来以供生产使用,当您说两者是相同的环境时,可能会出现问题。他们不是。在执行 Node.js 文件时,V8 并不是唯一重要的事情。
@GabrielLlamas:谢谢。 @Golo Roden:是的,如果评论得当的话。我们可以给出更多更好的答案。
@AmolMKulkarni:“模块代码始终是严格模式代码”——对于 Node 来说,完全正确。如果您在节点 v.6.10.2 中使用“use strict”,则以下代码将抛出错误:var obj = {}; Object.preventExtensions(obj); obj.a=1;
@fider:虽然你的问题对我来说不是很清楚。如果与此问题相关,您可以考虑提出一个新问题或继续在评论中解释。在此之前看看这个link,如果你能找到答案
我认为 Node.js 不包含完整的 Ecmascript 6 模块(默认情况下支持严格模式),请在此处查看这篇有用的文章(讨论在 Javascript/Node.js 中使用严格模式)=> tvernon.tech/blog/javascript-strict-mode