JavaScript有许多类型的块,例如while
块,if
块,for
块。 ES6引入了块范围,因此“纯粹语义”,“匿名”块是有意义的:
{ let a = 'I am declared inside a block'; }
console.log(a); // ReferenceError: a is not defined
上述类型的块(仅用于作用域)是什么?
答案 0 :(得分:1)
let语句为变量提供本地范围。它通过在单个代码块的词法范围内绑定零个或多个变量来工作;否则,它与块语句完全相同。请特别注意,使用var在let语句中声明的变量的范围仍然与在let语句之外声明的变量的范围相同;这些变量仍然具有功能范围。
文档将其称为let block
,let expression
(如果在表达式上下文中),或在某些情况下为implicit block
。
在你的例子中:
{ let a = 'I am declared inside a block'; }
console.log(a); // ReferenceError: a is not defined
您无法在其范围之外获取a
的值。这正是范围的意图。但是,您可以这样做:
{ let a; // instantiated inside this block
a = 'I am assigned inside a block';
console.log(a); // returns the value of a
}
答案 1 :(得分:0)
我认为它们被称为let
块。根据MDN,我似乎表面上看是正确的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#let_statement
阅读let
声明下的“范围规则”部分。