最近,我通过 Crockford 的JSLint运行了一些 JavaScript 代码,但出现了以下错误:
第 1 行第 1 个字符处存在问题:缺少“use strict”语句
。
经过一番搜索,我发现有些人会"use strict";在他们的 JavaScript 代码中添加此语句。一旦我添加了该语句,错误就不会再出现。不幸的是,Google 并没有透露此字符串语句背后的太多历史。当然,这肯定与浏览器如何解释 JavaScript 有关,但我不知道会产生什么影响。
那么"use strict";,这到底是什么?这意味着什么?它是否仍然有意义?
当前的浏览器是否响应该"use strict";字符串或者是否供将来使用?
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refer...
参考:https://segmentfault.com/q/1010000042376263?utm_source=sf-similar-question
答案:
1. 什么是 "use strict"?
"use strict" 是 ES5 (2009) 引入的指令,用于启用 JavaScript 的严格模式(Strict Mode)。它是一个编译指示(pragma),要求引擎以更严格的语法和行为规则执行代码。
2. 严格模式的作用
eval
创建作用域等。with
语句)。class
, let
),避免未来语法冲突。3. 关键行为变化示例
// 示例 1:未声明变量赋值(报错)
function demo() {
"use strict";
x = 10; // ReferenceError: x is not defined
}
// 示例 2:删除不可删除的属性(报错)
delete Object.prototype; // TypeError
// 示例 3:重复参数名(报错)
function sum(a, a) {
"use strict";
// SyntaxError: Duplicate parameter name
}
4. 历史背景
5. 浏览器支持与现状
6. 是否仍有意义?
arguments.caller
)。总结
Crockford 的 JSLint 强制要求 "use strict" 是出于代码质量规范。严格模式并非“未来功能”,而是已被广泛采用的现代 JS 开发标准实践。
问题内容: 最近,我通过Crockford的JSLint运行了一些JavaScript代码,它给出了以下错误: 第1行第1个字符处的问题:缺少“使用严格”语句。 通过搜索,我意识到有些人将其代码添加到了JavaScript中。添加语句后,错误停止出现。不幸的是,谷歌没有透露此字符串语句背后的许多历史。当然,它一定与浏览器如何解释JavaScript有关,但是我不知道会有什么影响。 那么到底是什么,
我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!
问题内容: 接口隔离原理(ISP)说,许多客户端特定的接口比一个通用接口好。为什么这很重要? 问题答案: ISP指出: 不应强迫客户依赖他们不使用的方法。 ISP与重要特性- 内聚和耦合有关。 理想情况下,您的组件必须高度定制。它提高了代码的健壮性和可维护性。 实施ISP可为您带来以下好处: 高内聚性 -更好的易懂性,鲁棒性 低耦合 -更好的可维护性,高抗变化性 如果您想了解有关软件设计原理的更多
问题内容: 关于Java的InterruptedException有一些有趣的问题和答案,例如Java中的InterruptedException 的原因和处理InterruptedException。但是,它们都没有告诉我InterruptedException的可能来源。 像SIGTERM,SIGQUIT,SIGINT这样的OS信号呢?在命令行上按CTRL-C是否会产生InterruptedE
问题内容: 我看过一些D3代码,它们带有类似这样的模式,用于附加元素: 我真的不明白这个片段。为什么选择null?我对D3的理解方式是,如果要添加圆,则应为: 同样,如果要追加HTML段落,则应该为: 类也是如此:如果将元素添加到类中foo,则应该为。 但是, 确实有效!元素被追加。那么,这是什么意思null呢?我在这里想念什么? 注意:这是一个自我回答的问题,试图提供一个针对该主题的“规范”问答
问题内容: C#和Java都定义 易失性读取具有获取语义 易失性写入具有释放语义 我的问题是: 这是定义volatile的唯一正确方法。 如果没有,如果语义相反,情况会完全不同,即 易失性读取具有释放语义 易失性写入具有语义 问题答案: 获取/释放语义的作用并不在于其他线程多久才能看到volatile字段本身的新写入的值,而在于易失性操作在不同线程之间建立事前联系的方式。如果线程A读取了一个vol
问题内容: 在Java中,可以使用 AtomicMarkableReference 原子地更新对象引用以及标记位。 该javadoc的状态: 实施注意事项:此实现通过创建表示“装箱的” [reference,boolean]对的内部对象来维护可标记的引用。 根据在该类的Java 8源代码中可以看到的情况,这是正确的: 该类的get方法的设计背后是否有原因? 使用这种布尔数组(而不是返回值对)有什么
这里已经阐明了和之间的区别。 但我的问题是,为什么我们要使用关键字?从生成的Java代码角度来看没有区别。 静态编程语言代码: 生成: