【发布时间】:2017-11-19 03:22:14
【问题描述】:
我找到了这个帖子-What does "use strict" do in JavaScript, and what is the reasoning behind it?
我在这里的理解是我应该use strict总是。
但我想知道,如果这是真的,那么使用“严格模式”总是更好,那么它甚至不会存在,因为这将是一种默认行为。
于是我搜索了ECMAScript 6th edition的定义,发现很多情况下都是默认的。
据official documentation about strict mode
ECMAScript 脚本句法单元可以使用以下任一方式处理 不受限制或严格模式的语法和语义。代码被解释 在以下情况下作为严格模式代码:
Global 代码如果以 Directive Prologue 开头,则为严格模式代码 包含使用严格指令(见 14.1.1)。
Module 代码始终是严格模式代码。
所有部分的 ClassDeclaration 或 ClassExpression 都是严格模式代码。
Eval 代码是严格模式代码,如果它以包含 Use Strict 指令的 Directive Prologue 开头,或者如果对 eval 的调用是包含在严格模式代码。
F如果相关的 FunctionDeclaration、FunctionExpression、GeneratorDeclaration、GeneratorExpression、MethodDefinition 或 ArrowFunction 包含在严格模式代码中,或者生成函数 [ [ECMAScriptCode]] 内部插槽以包含使用严格指令的指令序言开始。
F作为参数提供给内置函数和生成器构造函数的函数代码是严格模式代码,如果最后一个参数是一个字符串,在处理时是一个以指令开头的函数体包含使用严格指令的序言。
非严格模式代码的ECMAScript代码称为non-strict 代码。
那么,什么时候使用非严格代码比较合适?
提前致谢。
【问题讨论】:
-
它不能在浏览器中默认,因为仍然有很多应用程序在互联网上用旧版本的 javascript 编写,如果给定的浏览器默认引入
use strict,它会破坏这些应用程序(遗留代码)。正如您所说,对于所有新应用程序,建议始终使用use strict。 :) -
只使用严格。如果不支持,旧版浏览器将忽略
use strict。没有,什么时候不用。 -
use strict在这里提供了一种克制/更安全的体验(因此很严格)。想用就用,不想用就别用。
标签: javascript ecma