【问题标题】:jsHint "function not defined" issue, order of function declarations matters?jsHint“函数未定义”问题,函数声明的顺序很重要吗?
【发布时间】:2011-12-23 20:38:32
【问题描述】:

通过 jsHint 传递这段代码:

var A = function (spec) { 
  "use strict";
  var a = function () {
    return b();
  };

  var b = function () {
    return 5;
  };

  a();
};

返回此错误:

Line 4: return b();
'b' is not defined.

我知道这可能与此处解释的“提升”有关:JavaScript function order: why does it matter?

但是,以下代码返回相同的错误:

var A = function (spec) { 
  "use strict";
  function a () {
    return b();
  }

  function b () {
    return 5;
  }

  a();
};

如果我理解正确,至少第二个代码 sn-p 不应该返回错误。我弄错了吗?

即使考虑到提升机制,我仍然不明白为什么第一个代码 sn -p 应该是错误的。函数a 仅在函数b 定义后调用,所以b 将在a 的闭包中。是我的代码错了还是jsHint错了?

我知道这个问题纯粹是学术问题,因为代码在所有浏览器中都按预期工作。不过,我想知道为什么 jsHint 会抛出错误。

【问题讨论】:

    标签: javascript jslint jshint


    【解决方案1】:

    这是 jsLint 中的误报。
    您的两个代码 sn-ps 都可以正常工作。

    忽略警告。

    【讨论】:

    • 我不知道为什么 jsLint(及其分支)会忽略函数语句提升。
    • 我认为这在他们的 github 中有几个问题:61、47、29。 29 于 2011 年 3 月关闭,并评论说问题已解决(无论如何在他们的主分支中)。
    【解决方案2】:

    jsHint 试图通过指出潜在问题和非常规代码来帮助您。

    在这种情况下,它并不高兴,因为人类可能难以理解——即使它是完全有效的 Javascript。

    【讨论】:

      【解决方案3】:

      第一个例子是一个提升问题,因为 a() 在声明之前引用了 b()。解决方案是使用 'var a, b;'在你的“使用严格”之后;声明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多