jsHint“函数未定义”问题,函数声明的顺序很重要?

时间:2011-11-07 18:24:31

标签: javascript jslint jshint

通过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();
};

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

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

我知道这个问题纯粹是学术性的,因为代码在所有浏览器中都能正常运行。不过,我想知道为什么jsHint会抛出错误。

3 个答案:

答案 0 :(得分:4)

这是jsLint中的误报 你的两个代码片段都可以正常工作。

忽略警告。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

在这种情况下,它并不开心,因为人类可能很难理解 - 即使它是完全有效的Javascript。