--- title: Блок slug: Web/JavaScript/Reference/Statements/block tags: - JavaScript - Довідка translation_of: Web/JavaScript/Reference/Statements/block ---
{{jsSidebar("Statements")}}

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

{{EmbedInteractiveExample("pages/js/statement-block.html")}}

Синтаксис

Блок

{
  StatementList
}

Блок з міткою

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

Опис

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

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

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

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

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

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

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

З let та const

А ось ідентифікатори, оголошені операторами {{jsxref("Statements/let", "let")}} та {{jsxref("Statements/const", "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, тому що оголошення є унікальним всередині блоку.

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

Специфікація Статус Коментар
{{SpecName('ESDraft', '#sec-block', 'Block statement')}} {{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-block', 'Block statement')}} {{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-12.1', 'Block statement')}} {{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-12.1', 'Block statement')}} {{Spec2('ES3')}}
{{SpecName('ES1', '#sec-12.1', 'Block statement')}} {{Spec2('ES1')}} Початкове визначення. Реалізоване у JavaScript 1.0.

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

{{Compat("javascript.statements.block")}}

Див. також