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

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

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

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

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


当前回答

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

其他回答

严格模式消除了在非限制模式下会忽略的错误,从而使javascript " 更安全 " 。

是否认为它是最佳做法之一?

是 是,它被认为是最佳做法的一部分, 与 Javascript 合作,包括严格模式。这样做的方式是在你的联署材料档案中添加以下代码行。

'use strict';

在你的代码。

这对用户代理意味着什么?

说明代码应该严格解释 向浏览器这样的用户代理指定 他们应该把代码 完全像书面的一样对待 如果代码不合理的话 就会出错

例如:考虑在.js您的文件有以下代码:

设想情景1:[无严格模

var city = "Chicago"
console.log(city) // Prints the city name, i.e. Chicago

设想情况2:[无严格模

city = "Chicago"
console.log(city) // Prints the city name, i.e. Chicago

为何在两种情况下都打印变量名称?

不打开严格模式,用户代理商经常对问题代码进行一系列修改,以试图使问题代码变得合理。在表面上,这看似是一件好事,事实上,在严格模式之外工作使得人们有可能在不把所有细节都固定下来的情况下,用JavaScript代码湿透脚部。然而,作为一个开发者,我不想在我的代码中留下一个错误,因为我知道它可能会在晚些时候回来咬我,我还只是想写好代码。这就是严格模式有助于解决问题的地方。

设想方案3:[严格示范

'use strict';

city = "Chicago"
console.log(city) // Reference Error: asignment is undeclared variable city.

附加提示 :要使用严格模式保持代码质量, 您不需要一次又一遍地写入, 特别是如果您有多个.js您可以在eslint规则如下:

文件名 : .eslintrc.js

module.exports = {
    env: {
        es6: true
    },
    rules : {
        strict: ['error', 'global'],
        },
    };
    

那么,什么是严格防止的呢?

  • 使用变量而不声明这将以严格的方式丢弃一个错误。 这是为了防止您在应用程序中无意中创建全局变量。 打印芝加哥的例子特别覆盖了这一点 。

  • 删除变量或函数或参数严格情况下是无的。

    "use strict";
     function x(p1, p2) {}; 
     delete x; // This will cause an error
    
  • 复制参数名称严格允许。

     "use strict";
     function x(p1, p1) {};   // This will cause an error
    
  • 不允许以 Javascript 语言保留单词字词是工具界面,让,包,包,私人,受保护,公开,静态和产出

若要列出更全面的清单, 请在此检查 MDN 文件 :https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

use strict这是一种让您的代码更安全的方法, 因为您不能使用危险特性, 这些特性不能像你预期的那样工作。 而且,正如以前所写的那样, 它使代码更加严格。

通常JavaScript通常不遵循严格的规则,从而增加出错的可能性。"use strict", JavaScript 代码应该像使用终止语、在启动前宣布等其它编程语言一样,遵循一套严格的规则。

如果(如果)"use strict"使用该代码时,代码的编写应遵循一套严格的规则,从而减少出错和模棱两可的可能性。

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

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

严格模式可以防止内存泄漏。

请检查以下以非限制模式写入的函数 :

function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); // Stack Overflow

在此函数中, 我们正在使用一个变量, 名为name函数 内 函数 。 内部 汇编器将首先检查在该特定函数范围中是否有以该特定名称宣布的变量。 由于编辑器了解不存在该变量, 它将在外部范围中检查。 在我们的案例中, 它就是全球范围 。 同样的, 汇编器理解全球空间中也没有以该名称宣布的变量, 因此它会在全球空间中为我们创建这样一个变量。 从概念上讲, 该变量将创建在全球范围内, 并将在整个应用程序中提供 。

另一个假想是,比如,变量在子函数中被声明为子函数。 在这种情况下, 编译者检查该变量在外部范围的有效性, 即父函数。 只有这样, 它才能在全球空间中检查并创建变量。 这意味着需要做更多的检查。 这将影响应用程序的性能 。


现在让我们在严格模式下写入相同的函数 。

"use strict"
function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); 

我们会得到以下错误。

Uncaught ReferenceError: name is not defined
at getname (<anonymous>:3:15)
at <anonymous>:6:5

在此, 编译器会丢弃引用错误。 在严格模式下, 编译器不允许我们使用变量而不声明它。 这样可以防止内存泄漏。 此外, 我们可以写入更优化的代码 。