【发布时间】:2016-03-27 09:48:09
【问题描述】:
如下所示的一段代码在 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 疯了?
【问题讨论】:
-
不知道否决票,但这里是a bit of MDN that is relevant。
-
可能,
A或B可以在分配给message之前被调用,在这种情况下你确实会得到一个错误。 -
@FelixKling 是的。无论如何,如果
A或B在分配给message之前被调用,但在其定义之后,则不会发生错误。
标签: javascript closures ecmascript-6