最近,我通过Crockford的jslint 输入了一些我的笔记本代码, 它犯了以下错误:

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

某些搜索, 我意识到有些人在他们的 javascript 代码中添加了“ 严格使用 ” ; 。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并没有揭示此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读该语句有关, 但我不知道效果会是什么 。

那么,什么是“严格使用”;什么是“严格使用”;一切,它意味着什么,它是否仍然相关?

当前的任何浏览器是否响应“ 严格使用 ” ; 字符串, 或是否未来使用 ?


当前回答

请注意,严格使用是在5页缩写中引入的,此后一直保留。

下面是ES6和ES7中触发严格模式的条件:

如果模块代码以含有严格使用指令的指令前言开头(见14.1.1.1)。 模块代码总是严格的模式代码。 类声明或类表达式的所有部分都是严格的模式代码。 如果以含有严格使用指令的指令前言开头,或者如果对 Eval 的调用是包含在严格模式代码中的直接 eval (见12.3.4.1) 的调用是包含在严格模式代码中的直接 eval (见12.3.4.1) , 则 Eval 代码是严格的模式代码。 如果相关代码是严格模式代码, 函数代码是严格的模式代码。

其他回答

开发商使用“严格使用”的主要理由如下:

使用“ 使用严格( ) ” 将会确保变量在使用前以 var 来声明 。 例如 : 函数 usestratedemo () { 使用严格 { ; // works finevar a = ' no problem' ; /// does not works fine fine and problem k = “ problem” // 即便如此, 也会丢弃错误 object = {` problem' : 'Problection'} ;} n.b: “ 使用严格” 指令仅在脚本或函数开始时得到承认 。 字符串“ argument” 不能用作 varibl 。

简而言之,将减少代码的错误易感性,并反过来使您写好代码。

以阅读更多关于它的内容,您可在此查询。

包括严格使用您所有敏感的 javarpic 文件的起始点 从这一点上是一个小小方法 来成为一个更好的 javarpic 程序员, 避免随机变数变成全球性的, 事物静悄悄地变化 。

使用“ 严格使用 ” ; 不要突然使您的代码变得更好 。

缩略图5 中有一个特性,即严格模式。 您可以在脚本/ 函数顶部声明此功能, 从而启用严格模式 。

'use strict';

当 Javascript 引擎看到此指令时, 它将开始以特殊模式解释代码。 在此模式下, 当某些代码操作最终被检测到可能导致错误( 这是严格模式背后的推理 ) 时, 错误就会出现 。

考虑一下这个例子:

var a = 365;
var b = 030;

开发者执着于排列数字字数, 无意中初始化了变量b, 带有八字数。 非限制模式会将此解读为数值 24 的数值字数( 在基数 10 中) 。 然而, 严格模式会丢弃错误 。

关于严格模式的非穷尽性专业清单,请见此答复。


我应在哪里使用“严格使用”;

在我的新 Javascript 应用程序中: 绝对严格的模式可以用来作为检举人, 当您对您的代码做一些蠢事时。 在我现有的 javascript 代码中: 如果您现有的 javascript 代码有严格模式中被禁止的语句, 应用可能只是中断 。 如果您想要严格模式, 您应该准备调试并纠正您现有的代码 。 这就是为什么使用“ 严格 ” ; 不要突然使您的代码变得更好 。


我如何使用严格的模式?

在您的脚本上方插入“ 严格使用 ” ; 语句 : // 文件: 笔记本. js “ 严格使用 ” ; var a = 2;... 注意文件中的所有文字都将严格解释我的文稿。 js 。 或者, 插入“ 严格使用 ” ; 在您函数体上方插入语句: 函数 Dohine () { “ 严格使用 ” ; ......} 函数词汇范围内的事物将严格解释。 这里必须使用词汇范围。 例如, 如果您严格的代码要求 func 的话, 则此词词很重要 。


严格禁止什么?

(请注意,这不是一个详尽无遗的清单):

从历史上看, javascript 一直被混淆了如何界定函数的范围。 有时,这些功能似乎被静态地界定范围, 但有些特征使得它们表现得好像它们被动态地界定范围。 这是令人困惑的, 使程序难以阅读和理解。 误解引起错误。 这也是一个绩效问题。 静态范围界定将允许在汇编时发生可变的有约束力的情况, 但动态范围的要求意味着约束必须推迟到运行时间, 而这又来了


预留的单词,用于未来的 Javacramp 版本

缩略图 5 添加了一个保留单词列表。 如果您使用它们作为变量或参数, 严格的模式会丢出错误。 保留单词是:

安装、接口、让、包装、私营、受保护、公共、静态和产出


进一步读

严格模式 - javascript + @ mdn 浏览器支持严格模式向严格模式过渡

部分1: 缩略语 5 说明使用“严格使用”开关的递增使用 如何让缩略语执行者 清理大量刺略语的危险特征 而不突然打破世界上每个网站

当然,它也谈到很多这些错误的特征是什么,5 是如何修补这些错误的。

我两分钱

严格模式的目标之一是允许更快地调试问题。 它会帮助开发者, 当某些错误的事情发生, 可能导致您网页的沉默和奇怪行为时, 它会提出例外, 从而帮助开发者。 当我们使用严格模式时, 代码会丢弃错误, 帮助开发者提前修正它 。

在严格使用后我学到的几件重要东西:

防止全球变量声明:

“ 严格” ; var tree1data = { name: 'banana tree', age: 100,leafcount: 100,leafcount: 100,000}; 函数树( 树类型) { var age; var lifcount; 年龄 = tree. age; 叶数 = kree.leafcount; 树名称 = tree. name; }; var tree1 = 新树( riet1data); 控制台. log( windowowow);

现在, 这个代码创建了全球范围的树名, 可以使用 window. nameoftree 访问 。 当我们严格使用这个代码时, 代码会丢弃错误 。

未标记的引用引用器: 未定义树名 。

以下列语句删除:

无法使用像丑化js这样的工具对语句进行简单化。 它们也会被折旧, 从未来的 Javarint 版本中删除 。

样本 :

“ 严格” ; var tree1data = { name: 'banana tree', 年龄: 100, 叶数: 100 000} ; 函数树( 树类型) { var 年龄; var 叶数; 年龄= 树类型. age; 叶数= 树类型.leafcount; // 树名称= 树类型. name; 对于 (var i = 0; i & lt; 2) { / let( leafcount = i) { { / * do something */} { (val i = 0; i & lt; 2; +u) { 和 (leafcount = i) { { {/ * do something} {; var tree1 = 新的树 (tree1data); { likefor.log( windo) 。

防止重复:

当我们有重复财产时,它是一种例外,

unacaute 语法解析器: 在严格模式下不允许以对象文字复制数据属性

“严格使用”; var 树1data = { 名称: “香蕉树 ” , 年龄: 100, 叶数: 100 000, 名称: “香蕉树 ” ;

很少有更多的人,但我需要获得更多这方面的知识。