通过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会抛出错误。
答案 0 :(得分:4)
这是jsLint中的误报 你的两个代码片段都可以正常工作。
忽略警告。
答案 1 :(得分:2)
第一个例子是一个提升问题,因为a()在声明之前引用b()。解决方案是'var a,b;'在你的“严格使用”之后;言。
答案 2 :(得分:0)
jsHint试图通过指出潜在问题和非常规代码来帮助您。
在这种情况下,它并不开心,因为人类可能很难理解 - 即使它是完全有效的Javascript。