宣称“让”变量考虑一下:的ReferenceError在外部范围
'use strict';
{
let p = 1;
{
console.log(p);
let p = 2;
}
}
一个直觉告诉我们应该记录为“1”(因为VAR必须保留其旧重新宣布之前的价值)。但是,实际结果是ReferenceError。这是为什么? (基于标准的解释将被赞赏)。
请注意,我已经在外部范围声明了p
,所以它在内部块中已知。如果你注释掉p=2
这一行,一切正常。
作为验尸笔记,虽然这种行为似乎被记录,但它仍然是非常直观的,参见。这个C代码:
void main() {
int p = 1;
{
printf("%d\n", p); // prints '1'
int p = 2;
}
}
另一个JS fuckup特点要记的!
_“如果你注释掉p = 2的行,那么一切正常。”_当然,它确实......你没有一个冲突的块范围变量。 –