当前位置: 首页 > 面试题库 >

“严格使用”在JavaScript中有什么作用,其背后的原因是什么?

李和昶
2023-03-14
问题内容

最近,我通过Crockford的JSLint运行了一些JavaScript代码,它给出了以下错误:

第1行第1个字符处的问题:缺少“使用严格”语句。

通过搜索,我意识到有些人将"use strict";其代码添加到了JavaScript中。添加语句后,错误停止出现。不幸的是,谷歌没有透露此字符串语句背后的许多历史。当然,它一定与浏览器如何解释JavaScript有关,但是我不知道会有什么影响。

那么到底是"use strict";什么,它意味着什么,并且仍然有意义?

当前的浏览器是否响应该"use strict";字符串,或者该字符串可供将来使用?


问题答案:

引用一些有趣的部分:

严格模式是ECMAScript 5中的一项新功能,可让您将程序或功能置于“严格”的操作环境中。这种严格的上下文会阻止采取某些措施,并引发更多异常。

和:

严格模式可以通过以下两种方式提供帮助:

  • 它捕获了一些常见的编码漏洞,并引发异常。
  • 当采取相对“不安全”的操作(例如获得对全局html" target="_blank">对象的访问权限)时,它可以防止或引发错误。
  • 它禁用令人困惑或考虑不周的功能。

还要注意,您可以将“严格模式”应用于整个文件…或者您只能将其用于特定功能 (仍引用John Resig的文章)

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code...

如果您必须混合使用旧代码和新代码,这可能会有所帮助;-)

因此,我想它有点像"use strict"您可以在Perl中使用的 (因此得名?) :通过检测更多可能导致损坏的内容,它可以帮助您减少错误。

所有主要浏览器现在都支持严格模式。在[本机ECMAScript模块带有importexport语句)和ES6类中,严格模式始终处于启用状态,不能被禁用。



 类似资料:
  • 我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!

  • 在哪些情况下,应该使用? 是否只是为了合法性问题? 如果是,那么问题是什么? 因为我仍然使用开发我的所有项目

  • 问题内容: 接口隔离原理(ISP)说,许多客户端特定的接口比一个通用接口好。为什么这很重要? 问题答案: ISP指出: 不应强迫客户依赖他们不使用的方法。 ISP与重要特性- 内聚和耦合有关。 理想情况下,您的组件必须高度定制。它提高了代码的健壮性和可维护性。 实施ISP可为您带来以下好处: 高内聚性 -更好的易懂性,鲁棒性 低耦合 -更好的可维护性,高抗变化性 如果您想了解有关软件设计原理的更多

  • 问题内容: 我见过很多人声称您应该在选择查询中专门为想要的每一列命名。 假设我仍然要使用所有列,为什么我不使用? 即使考虑问题* SQL查询-从视图选择或从视图*选择col1,col2,’colN,我也不认为这是完全相同的副本,因为我正从略有不同的观点着手解决这个问题。 我们的原则之一是在优化之前就不进行优化。考虑到这一点,在被证明是资源问题或架构几乎是固定的之前,似乎应该使用 首选的 方法。众所

  • 问题内容: 我看过一些D3代码,它们带有类似这样的模式,用于附加元素: 我真的不明白这个片段。为什么选择null?我对D3的理解方式是,如果要添加圆,则应为: 同样,如果要追加HTML段落,则应该为: 类也是如此:如果将元素添加到类中foo,则应该为。 但是, 确实有效!元素被追加。那么,这是什么意思null呢?我在这里想念什么? 注意:这是一个自我回答的问题,试图提供一个针对该主题的“规范”问答

  • 问题内容: C#和Java都定义 易失性读取具有获取语义 易失性写入具有释放语义 我的问题是: 这是定义volatile的唯一正确方法。 如果没有,如果语义相反,情况会完全不同,即 易失性读取具有释放语义 易失性写入具有语义 问题答案: 获取/释放语义的作用并不在于其他线程多久才能看到volatile字段本身的新写入的值,而在于易失性操作在不同线程之间建立事前联系的方式。如果线程A读取了一个vol