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

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

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

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

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


当前回答

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

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

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

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

其他回答

由于浏览器的战争和不良的管理,手稿的设计和实施过于仓促。 结果导致许多设计决定不善,不直观的语法和混淆不清的语义进入了语言。 严格的方式旨在修正其中的一些错误。

“使用严格”指令在向程序员传达代码的同时, 也设定了对代码的替代解释。

例如,此关键字指方法定义中的对象,如此,或指其他语言的自定义。

let o = {
  name: 'John Doe',
  sayName: function(){
    console.log(this.name);
  }
};

o.sayName(); // 'John Doe'

这在方法上下文之外没有任何目的,但所有javascript函数都有这个关键词,无论它们是否为方法:

function run() {
  console.log(this);
}

run(); // Window

在这里,这是对一个全球目标的确定,它没有意义,也没有意义,因为全球目标已经在范围中存在。

在一个全球功能中,严格地以这种方式,决心作出不确定的决定,这正是我们所期望的。

"use strict"

function run() {
  console.log(this);
}

run(); // undefined

有些错误即使严格的方式也无法固定, 因为语法应该对旧浏览器有效, 因为它们忽略了“ 限制模式” 指令。 这是故意的 。

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

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

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

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

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

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

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

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

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

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

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

“严格”模式引入了5号标本中。

(function() {
  "use strict";
  your code...
})();

刻写“ 严格使用 ” ; 在您 js 文件的顶部打开严格的语法检查 。 它为我们执行以下任务 :

如果您试图指定给一个未声明变量, 则显示错误 。 如果您试图指定给一个未声明的变量, 则会阻止您覆盖密钥 js 系统库禁止某些不安全或易出错的语言功能。

个人功能内部的工程也严格使用。在代码中加入严格使用总是更好的做法。

浏览器兼容性问题 : “ 使用” 指令意在向后兼容。 不支持这些指令的浏览器将只看到一个字符串字典, 没有进一步引用。 因此, 它们会通过它继续前进 。