Блок (або складена інструкція у інших мовах) використовується, щоб об'єднати нуль або більше інструкцій. Блок позначається парою фігурних дужок і може мати необов'язкову мітку:
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
Блок
{
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. |
Сумісність з веб-переглядачами
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
block | Chrome Full support Yes | Edge Full support Yes | Firefox Full support 1 | IE Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes | nodejs Full support Yes |
Legend
- Full support
- Full support