--- title: Блок slug: Web/JavaScript/Reference/Statements/block tags: - JavaScript - Довідка translation_of: Web/JavaScript/Reference/Statements/block ---
Блок (або складена інструкція у інших мовах) використовується, щоб об'єднати нуль або більше інструкцій. Блок позначається парою фігурних дужок і може мати необов'язкову {{jsxref("Statements/label", "мітку")}}:
{
StatementList
}
LabelIdentifier: {
StatementList
}
StatementListLabelIdentifierБлок часто називають складеною інструкцією у інших мовах. Він дозволяє використовувати декілька інструкцій там, де 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")}}