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

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

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

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

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


当前回答

John Revig写了个好摘要 写了个好摘要

这只是一个字符串,你放 在你的 javacript 文件( 在文件顶部或函数内部) 中, 看起来像这个 :

"use strict";

输入您的代码不应该对当前浏览器造成任何问题, 因为它只是一条字符串。 它可能会在未来对您的代码造成问题, 如果您的代码违反了 pragma 。 例如, 如果您目前拥有 Foo = “ bar ” 而不先定义 Foo , 您的代码将会开始失效... 在我看来这是件好事。

其他回答

如果您使用在去年左右的一年中释放的浏览器, 那么它很可能支持 javascript 严格模式。 只有旧浏览器才会在 5 缩写5 成为当前标准之前使用, 不支持它 。

命令周围的引号确保代码在旧浏览器中仍然有效(尽管那些在严格模式下产生语法错误的东西通常只会导致脚本在旧浏览器中发生一些难以探测的故障 ) 。

严格模式对普通正文语义进行若干修改 :

消除一些标注的沉默错误, 将其修改为丢弃错误 。 修补错误, 使标标注的引擎难以进行优化 。 禁止某些可能在未来版本的标注中定义的语法 。

用于获取更多信息的 严格模式- javamart

我希望编辑最受欢迎的答案, 但失败了。

需要更多信息,请查看 mdn 文档。

“严格使用”5号标注5中引入的指令。

指令与声明相似,但不同。

严格使用不包含关键词:指令是一个简单的表达式语句,由特殊的字符串字典(单引或双引号)组成。 javastrash 引擎,不执行缩略图5, 只需看到表达式语句, 但没有副作用。 预计未来版本的缩略图标准会引入一个真正的关键词使用; 引号将因此过时。 只有在脚本或函数的开头使用严格使用, 也就是说, 它必须 prep 。

使用严格的指令 使用 严格指令 表明以下代码(在脚本或函数中)是严格的代码。 当脚本包含严格的使用指令时,以下代码(在脚本或函数中)是严格的代码。当脚本最高层次的代码(在函数中不是函数的代码)被视为严格的代码。当函数本身在严格的代码中定义时,或者当函数含有严格的指令时,函数的内容被视为严格的代码。当调用 evval () 时,传递到 eval () 方法的代码被视为严格的代码。

严格写字式5的严格模式是标本语言的一个限制性子集,它消除了有关语言的缺陷,并具有更严格的错误检查和更高安全性。 以下列出了严格模式与正常模式(前三种模式特别重要)之间的差异:

您无法在严格模式下使用声明。在严格模式下,所有变量都必须声明:如果您为未被声明为变量、函数、函数参数、抓抓-粘贴参数或全球对象属性的标识符指定一个值,那么您将获得一个引用器。在正常模式下,该标识符被默认为全球变量(作为全球对象属性),严格模式下,关键字具有未定义的函数值。

var hassstricmode = (函数 () {“ 严格使用 ” ; 返回此\\ un defered} () );

3⁄4 ̄ ̧漯B

在使用“严格使用”之后,“严格使用”代码应该像使用终止语、启动前声明等其他节目语言一样,遵循一套严格的规则。

如果使用“严格使用”,守则的编写应遵循一套严格的规则,从而减少错误和模棱两可的可能性。

我两分钱

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

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

防止全球变量声明:

“ 严格” ; 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, 名称: “香蕉树 ” ;

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