一个块如何仅用于范围调用?

时间:2013-07-10 16:17:28

标签: javascript nomenclature ecmascript-6

JavaScript有许多类型的块,例如while块,if块,for块。 ES6引入了块范围,因此“纯粹语义”,“匿名”块是有意义的:

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

上述类型的块(仅用于作用域)是什么?

2 个答案:

答案 0 :(得分: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 blocklet 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声明下的“范围规则”部分。