通过 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 函数顺序:为什么重要?
但是,以下代码返回相同的错误:
var A = function (spec) {
"use strict";
function a () {
return b();
}
function b () {
return 5;
}
a();
};
如果我理解正确,至少第二个代码片段不应该返回错误。我弄错了吗?
即使考虑到提升机制,我仍然不明白为什么第一个代码片段应该是错误的。函数a
仅在b
定义函数后调用,所以b
会在a
's 闭包中。我的代码错了还是 jsHint 错了?
我知道这个问题纯粹是学术性的,因为代码在所有浏览器中都按预期工作。不过,我想知道为什么 jsHint 会抛出错误。