繁体   English   中英

什么时候不要在 JavaScript 中使用“严格模式”?

[英]When to NOT use "strict mode" in javascript?

我发现了这篇文章 - JavaScript 中的“use strict”做了什么,其背后的原因是什么?

我在这里的理解是我应该始终use strict

但我想知道,如果这是真的,使用“严格模式”总是更好,那么它甚至不存在,因为这将是默认行为。

于是我搜索了 ECMAScript 6th edition 的定义,发现很多情况下都是默认的。

根据关于严格模式的官方文档

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

ģ叶形代码是严格模式的代码,如果它与包含一个使用严格的指令(见14.1.1)一个指令序幕开始。

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

一个ClassDeclaration或ClassExpressionLL部分是严格模式的代码。

ËVAL代码是严格模式下的代码,如果它包含在严格模式代码指令序言包含一个使用严格的指令,或者调用EVAL是直接的eval(见12.3.4.1)开始。

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

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

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

那么,什么时候是使用非严格代码的好选择呢?

提前致谢。

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

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

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

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

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

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

来自MDN

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

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

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引擎的负载。

小费

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

根据下面的MDN链接: -

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode

浏览器中的严格模式

主流浏览器现在实现严格模式。 但是,不要盲目依赖它,因为仍然有许多浏览器版本在野外使用,只有部分支持严格模式或根本不支持它(例如版本10以下的Internet Explorer!)。 严格模式会更改语义。 依赖这些更改将导致未实现严格模式的浏览器出现错误和错误。 在使用严格模式时要小心,并通过功能测试备份对严格模式的依赖,以检查是否实现了严格模式的相关部分。 最后,确保在支持严格模式且不支持严格模式的浏览器中测试代码。 如果仅在不支持严格模式的浏览器中进行测试,则很可能在浏览器中遇到问题,反之亦然。

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

如果您的javascript代码是由第三方库生成或编译的,请添加其他答案。 你不想操纵它,因为你没有写它。

您可以在编写 javascript 代码时使用严格模式,并在完成后删除严格模式吗? 然后,如果您需要更改某些内容,请再次添加严格模式?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM