我发现了这篇文章 - What does "use strict" do in JavaScript, and what is the reasoning behind it?
我在这里理解的是,我应该use strict
始终。
但我想知道,如果确实如此,那么使用“严格模式”总是更好,那么它甚至不会存在,因为这将是一种默认行为。
所以我搜索了ECMAScript第6版的定义,发现它是很多情况的默认设置。
相应于official documentation about strict mode
可以使用其中任何一个处理ECMAScript脚本语法单元 无限制或严格模式语法和语义。代码被解释 作为以下情况下的严格模式代码:
G 最高级代码是严格模式代码,如果它以指令序言开头 包含使用严格指令(见14.1.1)。
M 模块代码始终是严格模式代码。
A ll部分ClassDeclaration或ClassExpression是严格模式代码。
E val代码是严格模式代码,如果它以包含Use Strict Directive的Directive Prologue开头,或者如果对eval的调用是直接eval(见12.3.4.1),则包含在严格的模式代码。
如果关联的FunctionDeclaration,FunctionExpression,GeneratorDeclaration,GeneratorExpression,MethodDefinition或ArrowFunction包含在严格模式代码中,或者产生函数值的代码[F ,则代码是严格模式代码。 [ECMAScriptCode]]内部插槽以包含使用严格指令的指令序言开头。
作为内置函数和生成器构造函数的参数提供的F 代码是严格模式代码,如果最后一个参数是一个String,处理时是一个以指令开头的FunctionBody包含使用严格指令的序言。
非严格模式代码的ECMAScript代码称为非严格 代码。
那么,何时使用非严格代码是个不错的选择?
提前致谢。
答案 0 :(得分:22)
那么,何时不使用严格模式是个不错的选择?
当您运行旧的(或第三方)代码时,您还没有时间更新。
严格模式更好。它默认情况下不会打开,因为它会破坏未编写的旧代码。
答案 1 :(得分:10)
那么,何时不使用严格模式是个不错的选择?
在找到非声明变量时,严格模式会抛出引用错误。
如果你有这种无限制类型的代码,那就是使用变量而不声明。在某个函数/作用域内声明并在其他地方使用的一个变量(它将在那里未声明)并且您无法重写/更改它们,那么您不应该使用"use strict;"
模式,因为它会破坏代码
来自MDN
strict mode
您不能像在非严格模式下那样使用变量而不是声明它们
那是
a = "Hello World";
console.log(a);
'use strict';
a = "Hello World"; // => Throw a reference error
console.log(a);
上面的代码会抛出一个引用错误,因为使用了变量a
而没有声明它。
所以,你应该使用
'use strict';
var a = "Hello World";
console.log(a);
a = "Hello World";
console.log(a);

'use strict';
a = "Hello World";
console.log(a);

'use strict';
var a = "Hello World";
console.log(a);

严格模式会限制你很多限制,但可能会提高MDN所说的性能。还减少了JavaScript引擎的负载。
如果要从非严格模式迁移到严格模式,则应该非常小心每行代码和变量以及它们的范围。
答案 2 :(得分:4)
根据下面的MDN链接: -
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode
浏览器中的严格模式
主流浏览器现在实施严格模式。但是,不要盲目 依赖于它,因为仍然有许多浏览器版本 只有部分支持严格模式的狂野或者不支持 完全支持它(例如,低于版本10的Internet Explorer!)。严格 模式改变语义。依靠这些变化会导致错误 浏览器中没有实现严格模式的错误。行使 谨慎使用严格模式,并备份依赖严格模式 功能测试,检查严格模式的相关部分是否 实现。最后,确保在浏览器中测试您的代码 并且不支持严格模式。如果您只在不适合的浏览器中进行测试 支持严格模式,您很可能在浏览器中遇到问题 那样做,反之亦然。
答案 3 :(得分:2)
那么,何时不使用严格模式是个不错的选择?
如果您的javascript代码是由第三方库生成或编译的,请添加其他答案。你不想用它来操纵,因为你没有写它。