【问题标题】:Jshint.com requires "use strict". What does this mean? [duplicate]Jshint.com 要求“使用严格”。这是什么意思? [复制]
【发布时间】:2011-12-27 18:21:48
【问题描述】:

Jshint.com 报错:

第 36 行:var signin_found;缺少“use strict”语句。

【问题讨论】:

标签: javascript jshint


【解决方案1】:

在 js 文件的顶部(在 .js 文件的第 1 行)添加“use strict”:

"use strict";
...
function initialize_page()
{
    var signin_found;
    /*Used to determine which page is loaded / reloaded*/
    signin_found=document.getElementById('signin_button');
    if(signin_found) 
{

有关“使用严格”的更多信息,请参见 stackoverflow 上的另一个问题:

What does "use strict" do in JavaScript, and what is the reasoning behind it?

更新。

jshint.com 出了点问题,它要求你在每个函数中加上“use strict”,但应该允许为每个文件全局设置它。

jshint.com 认为这是错误的。

"use strict";    
function asd()
{
}

不过也没什么不好……

它希望你对每个函数都加上“use strict”:

function asd()
{
    "use strict";
}
function blabla()
{
    "use strict";
}

然后它说:

干得好! JSHint 没有发现你的代码有任何问题。

【讨论】:

  • 再次更新了我的答案,希望这次能有所帮助。
  • 实际上,一些(不正确的)脚本可能会尝试简单地连接多个脚本,从而导致代码不正确(非严格代码被执行为严格)。对每个函数进行严格的代码可以解决这个问题。
  • 捆绑工具连接JS文件并导致此问题的情况并不少见。确实,您应该将整个文件包装在 IIFE 中以避免这种情况并意外地将变量放在全局范围内。请参阅@lenrok7 答案以了解如何执行此操作。
【解决方案2】:

这里是 JSHint 维护者。

JSHint(网站上使用的版本)要求您在代码中使用函数级严格模式。关闭它很容易,您只需取消选中“代码未处于严格模式时发出警告”复选框:

为什么我们不允许@Czarek 建议的全局严格模式?因为您页面上使用的某些 JavaScript 文件可能与严格模式不兼容,并且全局严格模式会破坏该代码。要使用全局严格模式,有一个名为 globalstrict 的选项。

希望有帮助!

【讨论】:

  • 我在屏幕截图上没有看到“globalstrict”选项,它隐藏在某个地方吗?为什么不在“当代码不在严格模式下”下方添加另一个名为“允许全局严格”的复选框,并将其设为默认值。我认为大多数使用严格模式的人,对整个文件都这样做,在每个函数中添加这样的行有点过头了。
  • 为了网站的简洁。您可以阅读文档中的所有选项并使用 /*jshint */ 构造设置它们。基本上,我不希望 jshint.com 的首页被无数选项吓倒。
  • 你能帮我在全局范围内设置这个选项吗?stackoverflow.com/questions/9770968/passing-options-to-jshint
【解决方案3】:

我认为这是因为 jshint 试图“保护”我们免受意外分配严格模式对整个文件的影响。 并且最好用匿名函数包装代码,或者使用某种命名空间。

例如两者都在严格模式下运行:

(function() {

   "use strict";

   function foo() {
        .....
   }

   function bar() {
        .....
   }
}());

【讨论】:

    【解决方案4】:

    JSlint 要求您的代码处于“严格模式”

    为此,只需将"use strict"; 添加到代码顶部即可。

    【讨论】:

    • 是的,你可以把它写成"use strict"; ECMAScript 5 把它解释为一个函数。 ECMAScript 3 直接忽略它。
    • 你通过 JSlint 传递的新代码是什么?
    • 将您的代码包装在:(function(){ "use strict"; //rest of your code }());
    • 如果 JSHint 有问题,我不是 100%,但现在这是解决错误问题的唯一方法。
    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 2012-10-26
    • 2011-08-23
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多