最近,我通过克罗福德 查了一些JavaScript代码JSLint JSLint,并给出了以下错误:

第1行第1字符1:缺少“严格使用”声明的问题。

在做一些搜索时,我意识到有些人加了"use strict";输入 JavaScript 代码。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并未披露此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读 JavaScript 有关, 但我不知道效果会是什么 。

那么,什么是"use strict";关于它的意义是什么,它是否仍然相关?

当前浏览器中的任意浏览器响应"use strict";字符串, 还是用于未来用途 ?


当前回答

严格使用用于显示常见和重复错误, 以便以不同的方式处理, 并改变 Java 脚本的运行方式,

  • 预防意外全球事故

  • 无重复

  • 消除用

  • 消除这种胁迫

  • 更安全电子( )

  • 不可更改的错误

您也可以阅读此文件第1条详细信息

其他回答

开发者应该使用的主要理由"use strict"它们是:

  1. 防止意外宣布全球变量。"use strict()"将会确保变量被声明为var在使用之前使用。 如 :

    function useStrictDemo(){
     'use strict';
     //works fine
     var a = 'No Problem';
    
     //does not work fine and throws error
     k = "problem"
    
     //even this will throw error
     someObject = {'problem': 'lot of problem'};
    }
    
  2. 注:N.B:"use strict"指令仅在脚本或函数的开头确认。
  3. 字符串"arguments"无法用作变量 :

    "use strict";
    var arguments = 3.14;    // This will cause an error
    
  4. 将限制关键字作为变量的使用。 试图使用关键字将会丢弃错误 。

简言之,你的代码将减少容易出错的程度,反过来又将使得你写好代码。

更多信息,请查看在这里.

使用'use strict';不会突然让你的代码变得更好。

缩略JavaScript 严格模式的特性是ECMAScript 5。您可以在脚本/功能的顶部声明此功能,从而启用严格模式。

'use strict';

当 JavaScript 引擎看到这个时指令指令,它将开始以特殊模式解释代码。在这个模式中,当某些编码做法最终被检测出潜在的错误(这是严格模式背后的推理)时,错误就会被抛出。

考虑一下这个例子:

var a = 365;
var b = 030;

开发者在急于排列数字字面时 无意中初始化了变量b带有 八进制字元。 非限制模式会将此解读为带有值的数值字元24不过,严格模式会出错

严格模式的非详尽无遗的专门专业清单,见回答本答案.


我该在哪里使用'use strict';?

  • 在我的新建新JavaScript 应用程序 :绝对!当你用代码做蠢事时 严格模式可以用作告密者

  • 在我的现有JavaScript 代码 :可能不会!如果您现有的 JavaScript 代码有严格模式中被禁止的语句, 应用程序会中断。 如果您想要严格模式, 您应该准备调试并纠正您现有的代码。 这就是为什么使用'use strict';不会突然使您的代码变得更好.


我如何使用严格的模式?

  1. 插入a'use strict';脚本上方的语句 :

     // File: myscript.js
    
     'use strict';
     var a = 2;
     ....
    

    请注意文件的所有内容myscript.js将严格解释。

  2. 或者,插入'use strict';函数体上方的语句:

     function doSomething() {
         'use strict';
         ...
     }
    

    里面的每样东西词汇范围函数一函数doSomething将严格解释。词汇范围在此很重要。 例如, 如果您的严格code 调用一个库的函数,即不严格,只有您的代码在严格模式下执行,而不是所谓的函数。见回答本答案以寻求更好的解释。


严格禁止什么物品?

我找到一个优雅文章说明严格禁止的若干事项(请注意,这不是一个详尽无遗的清单):

范围范围 范围范围 范围

历史上, JavaScript 被混淆了函数的范围。 有时它们看起来是静态的范围, 但有些特征让它们表现得好像是动态的范围。 这使得程序很难读懂和理解。 错误理解导致错误。 这也是一个性能问题。 静态范围界定允许在编译时发生可变的约束力, 但动态范围要求意味着约束必须推迟到运行时间, 而运行时间会受到重大的性能处罚 。

严格模式要求所有变量都固定绑定。 这意味着以前需要动态绑定的特征必须取消或修改。 具体地说,配有语句的功能被删除,而电子逆向拍卖功能改变其呼叫者环境的能力受到严重限制。

严格守则的一个好处就是 诸如YUI YUI 压缩器处理时可以做得更好。

隐含的全球变量

JavaScript 隐含了全球变量。 如果您没有明确声明变量, 则会暗含地声明一个全球变量。 这样可以让初学者更容易编程, 因为他们可以忽略一些基本的家务。 但这会让大型程序的管理更加困难, 并大大降低可靠性。 因此严格地说, 隐含的全球变量不再创建。 您应该明确声明所有变量 。

全球渗漏

有一些情况可能导致this被约束对象。例如,如果您忘记提供new调用构建器的构造器函数时的前缀this会被意外地绑定到全球对象上, 所以它不会启动新对象, 而是静静地干扰全球变量。 在这种情况下, 严格的方式将会约束thisundefined,这将导致构建者提出一个例外,使错误能够更快地被检测出来。

吵闹失败

JavaScript 一直拥有只读的属性, 但直到 ES5 的属性, 您无法自己创建这些属性 。Object.createProperty函数暴露了该功能。如果您试图为只读属性指定一个值,它会默默地失败。该配置不会改变该属性的价值,但您的程序会像原计划一样进行。这是一个完整性危险,可能导致程序出现不一致状态。严格地说,试图改变只读属性将是一个例外。

八进

数字的八进制( 或基数 8) 表示在对单词大小为 3 倍数的机器进行机器级程序时非常有用。 您在与CDC 6600 主机合作时需要八进制, 该主机的单词大小为 60 位数。 如果您可以读八进制, 您可以将一个单词看成 20 位数。 两位数字代表了操作代码, 8 个登记册中的一位数识别了其中一位数。 在机器代码向高级语言的缓慢过渡期间, 以编程语言提供八进制格式被认为是有用的 。

在C中,选择了极不幸的八进制表示:领先零。在C中,0100指64, 不是100, 和08更不幸的是,这种过时主义已经被复制为几乎所有现代语言,包括JavaScript, 在那里它只用来制造错误。它没有任何其他目的。 所以严格地说, 八进制不再被允许。

爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱

在ES5中,伪参数数组变得有点像 ES5 中的阵列。calleecaller属性。这样就可以通过您的arguments在不放弃很多保密背景的情况下 不受信任的代码。arguments职能财产被删除。

在严格模式下,函数字典中的重复键将产生语法错误。函数不能有两个相同名称的参数。函数不能有一个与其参数之一具有相同名称的变量。函数不能有相同名称的变量。delete试图用它自己的变量delete非可配置财产现在被抛出一个例外。 原始价值不是暗含的。


未来 JavaScript 版本的预留单词

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

implements, interface, let, package, private, protected, public, static, 和yield


继续阅读

包括use strict在您所有敏感 JavaScript 文件的起始处, 从此点起, 是一个小小方法, 可以成为一个更好的 JavaScript 程序员, 避免随机变数变成全球变数, 并且静静地变化 。

使用“ 严格 ” ; 是 ECMA 试图让 JavaScript 稍微强一点 。 它使JavaScript 尝试让 JavaScript 稍微强一点 。 它使JavaScript 尝试让 JavaScript 至少 略微“ 严格 ” ( 其他语言自90 年代以来实施严格的规则 ) 。 实际上, JavaScript 开发者“ 强制” 遵循某种最佳的编码 。 尽管如此, JavaScript 仍然非常脆弱 。 没有打印变量、 类型方法等东西。 我强烈建议 JavaScript 开发者学习一种更强健的语言, 如 Java 或 ActionScript 3 , 并在您的 JavaScript 代码中实施同样的最佳做法, 它会更好, 更容易调试。

在ECMAScript委员会里 有一些人说得很好:对 JavaScript, 第一部分 1: ECMAScript 5 的修改”关于逐步增加使用《公约》和《京都议定书》"use strict"允许 JavaScript 执行者清理 JavaScript 的许多危险特性,

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