如何在Node.js中解释'use strict'语句?

178 javascript use-strict node.js

我已经开始探索Node.js并编写了许多演示Web应用程序,以了解Node.js,Express.js,jade等的流程.

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

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

Amo*_*rni 188

"use strict";

基本上它启用严格模式.

严格模式是一种允许您在"严格"操作环境中放置程序或功能的功能.在严格的操作上下文中,方法表单像以前一样将它绑定到对象.函数表单将此绑定到undefined,而不是全局集对象.

根据你的意见,你会说有些不同之处.但这是你的假设.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问题:JavaScript中"使用严格"做了什么以及它背后的原因是什么


ECMAScript 6:

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

10.2.1严格模式代码

可以使用无限制或严格模式语法和语义来处理ECMAScript脚本语法单元.在以下情况下,代码被解释为严格模式代码:

  • 全局代码是严格模式代码,如果它以包含使用严格指令的指令序言开头(见14.1.1).
  • 模块代码始终是严格的模式代码.
  • ClassDeclaration或ClassExpression的所有部分都是严格模式代码.
  • 如果Eval代码以包含Use Strict Directive的Directive Prologue开头,或者对eval的调用是严格模式代码中包含的直接eval(见12.3.4.1),则Eval代码是严格模式代码.
  • 如果关联的FunctionDeclaration,FunctionExpression,GeneratorDeclaration,GeneratorExpression,MethodDefinition或ArrowFunction包含在严格模式代码中,或者如果产生函数[[ECMAScriptCode]]内部槽的值的代码以指令序言开头,则函数代码是严格模式代码包含使用严格指令.
  • 作为内置函数和生成器构造函数的参数提供的函数代码是严格模式代码,如果最后一个参数是一个String,处理时是一个以包含Use Strict指令的Directive Prologue开头的FunctionBody.

此外,如果您丢失了当前版本的Node.js支持的功能,此node.green可以帮助您(利用与kangax相同的数据).

  • 首先,Chrome并不是这个星球上唯一的浏览器.只是Node.js和Chrome使用V8,并不意味着它在所有浏览器中的工作方式都是一样的.其次,文件(aka模块)的加载方式有所不同.第三,浏览器的脚本通常连接起来用于生产用途,当你只是说两者都是相同的环境时,就会出现问题.他们不是.在执行Node.js文件时,V8并不是唯一重要的事情. (10认同)
  • @GabrielLlamas:谢谢.@ Golo Roden:是的,如果评论得当.我们可以给出更好的答案. (8认同)
  • @AmolMKulkarni:"模块代码总是严格的模式代码" - 对于Node来说,它不是**.如果你不**在节点v.6.10.2中使用'use strict',代码将******抛出错误:`var obj = {}; Object.preventExtensions(OBJ); obj.a = 1;` (5认同)
  • 这可能对默认严格模式的研究很有帮助:http://imaginativethinking.ca/what-the-heck-is-node-modules-strict-by-default/ (3认同)