何时不在javascript中使用"严格模式"?

Ram*_*ues 22 javascript ecma

我发现这篇文章 - 在JavaScript中做什么"使用严格"做什么,背后的原因是什么?

我在这里理解的是我应该use strict 永远.

但我想知道,如果确实如此,那么使用"严格模式"总是更好,那么它甚至不会存在,因为它将是一种默认行为.

所以我搜索了ECMAScript第6版的定义,发现它是很多情况下的默认值.

相关官方文档关于严格模式

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

G lobal代码是严格模式代码,如果它以包含Use Strict Directive的指令序言开头(见14.1.1).

中号 odule代码始终是严格模式代码.

一个ClassDeclaration或ClassExpression的LL部分是严格模式的代码.

E val代码是严格模式代码,如果它以包含Use Strict Directive的Directive Prologue开头,或者对eval的调用是严格模式代码中包含的直接eval(见12.3.4.1).

˚F结代码是严格模式的代码,如果相关联的FunctionDeclaration,FunctionExpression,GeneratorDeclaration,GeneratorExpression,MethodDefinition,或ArrowFunction包含在严格模式代码,或者如果产生该函数的[[ECMAScriptCode]]内部槽的值的代码开始于一个指令包含使用严格指令的序言.

˚F被作为参数传递给内置的功能和发电机的构造提供油膏代码是严格模式代码,如果最后一个参数是一个字符串,在处理时是用含有使用严格的指令一个指令序章开头的函数体.

非严格模式代码的ECMAScript代码称为非严格 代码.

那么,何时使用非严格代码是一个不错的选择?

提前致谢.

Que*_*tin 23

那么,何时是不使用严格模式的好选择?

当您运行旧的(或第三方)代码时,您还没有时间更新.

严格的模式更好.它默认情况下不会打开,因为它会破坏未编写的旧代码.


Sag*_*r V 10

那么,何时是不使用严格模式的好选择?

找到非声明变量时,严格模式会抛出引用错误.

如果你有这样一个无限制类型的代码,那就是使用变量而不声明.一个变量在某个函数/作用域内声明并在其他地方使用(它将在那里未声明)并且你不能重写/更改它们,那么你不应该去"use strict;"模式,因为它会破坏代码.

来自MDN

严格模式对常规JavaScript语义进行了一些更改.

  1. 严格模式通过更改它们以抛出错误来消除一些JavaScript无提示错误.
  2. 严格模式修复了使JavaScript引擎难以执行优化的错误:严格模式代码有时可以比非严格模式的相同代码运行得更快.
  3. 严格模式禁止在ECMAScript的未来版本中可能定义的某些语法.

什么时候进去 strict mode

您不能像在非严格模式下那样使用变量而不声明它们

那是

以下将起作用,因为它是非严格模式

a = "Hello World";
console.log(a);
Run Code Online (Sandbox Code Playgroud)

以下操作无效,因为它处于严格模式

'use strict';
a = "Hello World";  // => Throw a reference error
console.log(a);
Run Code Online (Sandbox Code Playgroud)

上面的代码将抛出一个引用错误,因为使用变量a而不声明它.

所以,你应该使用

'use strict';
var a = "Hello World";
console.log(a);
Run Code Online (Sandbox Code Playgroud)

非严格模式下的示例

a = "Hello World";
console.log(a);
Run Code Online (Sandbox Code Playgroud)

严格模式下的错误示例

'use strict';
a = "Hello World";
console.log(a);
Run Code Online (Sandbox Code Playgroud)

严格模式下的示例没有错误

'use strict';
var a = "Hello World";
console.log(a);
Run Code Online (Sandbox Code Playgroud)

简而言之

严格模式会限制你很多限制,但可能会提高MDN的性能.还减少了JavaScript引擎的负载.

小费

如果要从非严格模式迁移到严格模式,则应该非常小心每行代码和变量以及它们的范围.

  • 这并没有真正解决"在javascript中何时不使用'严格模式'的问题?" (21认同)