1

JavaScript has many types of block, such as while blocks, if blocks , for blocks. ES6 introduces block scoping, so "purely semantic", "anonymous" blocks make sense:

{ let a = 'I am declared inside a block'; }
console.log(a); // ReferenceError: a is not defined

What is the above type of block (used only for scoping) called?

4

2 回答 2

1

以下是相关文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#Block_scope_with_let_(Merge_into_let_Statement)

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
}
于 2013-07-10T16:20:01.680 回答
0

我会假设它们被称为let块。根据 MDN,我似乎表面上是对的:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#let_statement

阅读声明下的“范围规则”部分let

于 2013-07-10T16:18:54.127 回答