JavaScript有许多类型的块,如while
块、if
块、for
块。ES6引入了块作用域,因此“纯语义”、“匿名”的块是有意义的:
{ let a = 'I am declared inside a block'; }
console.log(a); // ReferenceError: a is not defined
上面的块类型(仅用于作用域)是什么?
发布于 2013-07-11 00:20:02
let语句为变量提供局部作用域。它的工作方式是在单个代码块的词法范围内绑定零个或多个变量;否则,它与block语句完全相同。特别要注意的是,在let语句内使用var声明的变量的作用域仍然与在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
}
发布于 2013-07-11 00:18:54
我假设它们被称为let
块。根据MDN的说法,我似乎表面上是对的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#let_statement
阅读let
语句下的“作用域规则”部分。
https://stackoverflow.com/questions/17575825
复制相似问题