下面的一段代码在Firefox和Chrome中运行完美无缺。
function A() {
console.log(message);
}
let B = function () {
console.log(message);
};
let message = 'Hello, World!';
A();
B();
无论如何,JSHint抱怨声明前使用的message
变量。
声明之前使用了'message',这对于'let'变量是非法的。
当声明跟在闭包块之后,在闭包内部的外部作用域中使用let或const声明的变量,或者JSHint是疯了吗?
答案 0 :(得分:1)
在您的情况下,使用使用let
定义的变量很好。但在其他情况下,它会导致问题。例如,
console.log(x); let x = 10;
会引发参考错误。因为x
已创建但未初始化。这与使用var
的普通变量定义不同。在let
的语句执行之前,initialized
声明不会是let
。因此,JSHint以通用的方式向您抱怨您的代码。