214

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

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

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

4

1 回答 1

208

"use strict";

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

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

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

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

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

了解更多信息:

  1. 严格模式
  2. 浏览器中的 ECMAScript 5 严格模式支持
  3. 严格模式即将到来
  4. 严格模式的兼容性表
  5. Stack Overflow 问题:“use strict”在 JavaScript 中的作用及其背后的原因是什么


ECMAScript 6:

ECMAScript 6 代码和严格模式。以下是规范的简要说明

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相同的数据)。

于 2013-08-24T10:30:27.793 回答