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

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

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

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

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


当前回答

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

缩略图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 浏览器支持严格模式向严格模式过渡

其他回答

提醒大家小心, 所有你们这些硬收费程序员: 对现有代码应用“ 严格使用” 可能很危险, 这样做不是一件令人感觉良好、 快乐的贴纸, 你可以拍下代码来“ 更好” 。 使用“ 严格使用” 的套件, 浏览器会突然在它以前从未丢过的随机地方 丢出例外, 仅仅因为在那个地方, 你正在做一些 默认/ 粗略的刺绣手法 乐于允许的事情, 但严格的刺绣手法的恶作剧, 你可能隐藏着严格违反规则的恶作剧。

如果您要跳跳跳, 将“ 严格使用” 应用在全面的单位测试和严格配置的 jshint 构建任务上是一个好主意, 这将给你一些信心, 因为您打开了严格模式, 您的模块没有黑暗的角落, 并且会因为您打开了严格模式而可怕的爆炸。 或者, 嘿, 这里还有一个选项: 不要在您的遗留代码中添加“ 严格使用 ” , 这样可能更安全, 说实话。 绝对不要在您不拥有的模块中添加“ 严格使用 ” 。

我认为即使这是致命的笼笼动物, “ 严格使用” 也可以是好东西, 但你必须做对。 最好的严格时间是您的项目是绿地, 并且从零开始。 配置 jshint/ Jslint , 配置所有警告和选项, 并尽可能紧紧地按您的团队的胃口调调动, 获得良好的建筑/ 测试/ 资产系统, 并像 grunt+karma+chai 那样操作, 并且只有这样, 才能开始将您所有的新模块标记为“ 严格使用 ” 。 准备治愈很多错误和www。

我的项目在采用“严格使用”时不是一个绿地项目。 结果,我的假肢充满了红色标记, 因为我对一半的模块没有“严格使用”, Jshint 抱怨这一点。 这提醒了我未来应该做什么。 我的目标是因为我所有缺失的“严格使用”的语句而没有红色标记,

我强烈建议每个开发商现在就开始使用严格模式。 有足够的浏览器支持严格模式,

显然,在最初的阶段,我们从未遇到过错误。 为了获得全部好处,我们需要在转换到严格模式后进行适当的测试,以确保我们掌握了一切。 当然,我们不只是在代码中严格使用,而且假设没有错误。 因此,语气是,是时候开始使用这个非常有用的语言功能来写更好的代码了。

例如,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

jslint 是由 douglas crockford 撰写的调试器。 只需在您的脚本中粘贴, 它就能快速扫描您的代码中的任何明显问题和错误 。

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

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

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

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

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

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

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

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

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

3⁄4 ̄ ̧漯B

“ 严格使用 ” ; 是程序员不会使用松散或刺绣的坏性能的保险。 它是一种指南, 就像标尺会帮助您做直线。 “ 严格使用” 有助于您做“ 直线编码 ” 。

那些不愿使用统治者直线行事的人 通常最终会出现在那些网页上 要求其他人调试他们的代码

杜格·克罗克福德(Doug Crockford)曾是一位高级刺绣开发商, 多年来一直担任高级刺绣开发商, 他在这里有一个非常有趣的职位。

现代刺绣作业应总是引出“严格使用”的“严格使用”; 柔和。 ecma组之所以选择“严格”模式的唯一原因是允许经验较少的编码员使用刺绣,然后给予时间适应新的、更安全的编码作业。

使用“ 严格 ” , 是否是使刺绣更加坚固的“ 严格 ” 。 它带来js 试图使其至少略微“ 严格 ” ( 其他语言自90年代以来实施严格的规则 ) 。 它实际上是“ 强制” 刺绣开发者遵循某种最佳编码实践 。 但是, 刺绣非常脆弱 。 没有打印变量、 打字方法等东西。 我强烈建议刺绣开发者学习一种更强有力的语言, 如 java 或 actscript3 和 impl 。