我发现这篇文章 - 在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代码称为非严格 代码.
那么,何时使用非严格代码是一个不错的选择?
提前致谢.
Sag*_*r V 10
那么,何时是不使用严格模式的好选择?
找到非声明变量时,严格模式会抛出引用错误.
如果你有这样一个无限制类型的代码,那就是使用变量而不声明.一个变量在某个函数/作用域内声明并在其他地方使用(它将在那里未声明)并且你不能重写/更改它们,那么你不应该去"use strict;"模式,因为它会破坏代码.
来自MDN
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引擎的负载.
如果要从非严格模式迁移到严格模式,则应该非常小心每行代码和变量以及它们的范围.