Блок

Блок (або складена інструкція у інших мовах) використовується, щоб об'єднати нуль або більше інструкцій. Блок позначається парою фігурних дужок і може мати необов'язкову мітку:

Синтаксис

Блок

{
  StatementList
}

Блок з міткою

LabelIdentifier: {
  StatementList
}
StatementList
Інструкції, згруповані всередині блоку.
LabelIdentifier
Необов'язкова мітка для візуальної ідентифікації або як вказівник для оператора break.

Опис

Блок часто називають складеною інструкцією у інших мовах. Він дозволяє використовувати декілька інструкцій там, де JavaScript очікує лише одну. Об'єднання інструкцій у блоки є звичайною практикою у JavaScript. Протилежна поведінка можлива завдяки порожньому оператору, де ви не надаєте інструкцію, хоча вона вимагається.

Блоки часто використовуються у поєднанні з операторами if та for.

Правила області видимості блоку

З var та оголошенням функцій

Змінні, оголошені оператором var або створені оголошенням функційне мають блочної області видимості. Змінні, створені всередині блоку, додаються у область видимості функції або скрипта, що його містить, і ефект від присвоєння їм значення виходить за межі блоку. Іншими словами, блок не створює область видимості. Для прикладу:

var x = 1;
{
  var x = 2;
}
console.log(x); // виведе 2

Цей код виведе 2, тому що інструкція var x всередині блоку знаходиться в тій самій області видимості, що й інструкція var x перед блоком.

З let та const

А ось ідентифікатори, оголошені операторами let та const мають блочну область видимості:

let x = 1;
{
  let x = 2;
}
console.log(x); // виведе 1

Інструкція x = 2 обмежена областю видимості блоку, у якому записана.

Те саме працює для const:

const c = 1;
{
  const c = 2;
}
console.log(c); // виведе 1 і не викине SyntaxError...

Зауважте, що const c = 2 у області видимості блоку не викине SyntaxError: Identifier 'c' has already been declared, тому що оголошення є унікальним всередині блоку.

Специфікації

Специфікація Статус Коментар
ECMAScript Latest Draft (ECMA-262)
The definition of 'Block statement' in that specification.
Draft
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Block statement' in that specification.
Standard
ECMAScript 5.1 (ECMA-262)
The definition of 'Block statement' in that specification.
Standard
ECMAScript 3rd Edition (ECMA-262)
The definition of 'Block statement' in that specification.
Standard
ECMAScript 1st Edition (ECMA-262)
The definition of 'Block statement' in that specification.
Standard Початкове визначення. Реалізоване у JavaScript 1.0.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
blockChrome Full support YesEdge Full support YesFirefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support

Див. також