在外部作用域中使用let或const声明变量之前,在闭包中使用变量是否合法?

时间:2016-03-27 09:48:10

标签: javascript closures ecmascript-6

下面的一段代码在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是疯了吗?

1 个答案:

答案 0 :(得分:1)

在您的情况下,使用使用let定义的变量很好。但在其他情况下,它会导致问题。例如,

console.log(x); let x = 10; 

会引发参考错误。因为x已创建但未初始化。这与使用var的普通变量定义不同。在let的语句执行之前,initialized声明不会是let。因此,JSHint以通用的方式向您抱怨您的代码。