这个问题在这里已经有了答案:“use strict”在 JavaScript 中做了什么,背后的原因是什么? (30 个回答) 8 年前关闭。
我开始探索Node.js,写了很多demo web application,了解Node.js、Express.js、jade等的流程。
但是我最近遇到的一件事是语句 "use strict"
作为每个函数和每个 .js
文件中的第一行。
Node.js 究竟是如何解释的?
'use strict';
文件范围时按预期工作。当您将 non-strict 与 strict 文件连接在一起时,或者当您在 HTML 页面的内联脚本标记(Node 没有)内设置 use strict
时,就会出现问题。
"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 相同的数据)。
var obj = {}; Object.preventExtensions(obj); obj.a=1;