Ðлок
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Ðлок инÑÑÑÑкÑий (или ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ Ð² дÑÑгиÑ
ÑзÑкаÑ
) иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð³ÑÑппиÑовки нÑÐ»Ñ Ð¸Ð»Ð¸ более инÑÑÑÑкÑий. Ðлок оÑделÑеÑÑÑ Ð¿Ð°Ñой ÑигÑÑнÑÑ
Ñкобок и Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑионалÑно бÑÑÑ Ð¿Ð¾Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½:
СинÑакÑиÑ
[имÑ:] {
инÑÑÑÑкÑиÑ_1;
инÑÑÑÑкÑиÑ_2;
...
инÑÑÑÑкÑиÑ_n;
}
инÑÑÑÑкÑиÑ_1,инÑÑÑÑкÑиÑ_2,инÑÑÑÑкÑиÑ_n-
ÐнÑÑÑÑкÑии, ÑгÑÑппиÑованнÑе внÑÑÑи блока инÑÑÑÑкÑий.
- имÑ
-
ÐеобÑзаÑелÑное
имÑÐ´Ð»Ñ Ð²Ð¸Ð·ÑалÑной иденÑиÑикаÑии или иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ðº ÑоÑки вÑÑ Ð¾Ð´Ð° Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑаbreak.
ÐпиÑание
ÐÑа инÑÑÑÑкÑÐ¸Ñ ÑиÑоко иÑполÑзÑеÑÑÑ Ñ Ð¾Ð¿ÐµÑаÑоÑами ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñоком (н., if...else, for, while). ÐапÑимеÑ:
while (x < 10) {
x++;
}
ÐбÑаÑиÑе внимание, ÑÑо блок инÑÑÑÑкÑий не заканÑиваеÑÑÑ ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой.
Ðлок инÑÑÑÑкÑий ÑаÑÑо назÑваеÑÑÑ Ñложной (ÑоÑÑавной) инÑÑÑÑкÑией в дÑÑÐ³Ð¸Ñ ÑзÑÐºÐ°Ñ . Ðн позволÑÐµÑ Ð²Ð°Ð¼ иÑполÑзоваÑÑ Ð½ÐµÑколÑко опеÑаÑоÑов Ñам, где JavaScript Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð¾Ð´Ð¸Ð½ опеÑаÑоÑ. ÐомеÑение инÑÑÑÑкÑий в блок - ÑÑо ÑаÑпÑоÑÑÑанÑÐ½Ð½Ð°Ñ Ð¿ÑакÑика в JavaScript. ÐÑоÑивоположное поведение - иÑполÑзование пÑÑÑого опеÑаÑоÑа Ñам, где Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð´ÐµÐ¹ÑÑвий не нÑжно, а опеÑаÑÐ¾Ñ ÑÑебÑеÑÑÑ.
ÐÑавила облаÑÑи видимоÑÑи блока
С иÑполÑзованием var
ÐеÑеменнÑе, обÑÑвленнÑе ÑеÑез var, не имеÑÑ Ð±Ð»Ð¾Ñной облаÑÑи видимоÑÑи. ÐеÑеменнÑе, введÑннÑе внÑÑÑи блока, имеÑÑ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи ÑодеÑжаÑÑÑ Ð¸Ñ
ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ ÑкÑипÑ, и поÑледÑÑÐ²Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи в ниÑ
знаÑÐµÐ½Ð¸Ñ ÑаÑпÑоÑÑÑанÑÑÑÑÑ Ð·Ð° гÑаниÑÑ, ÑобÑÑвенно, блока, в коÑоÑом они обÑÑвленÑ. ÐÑÑгими Ñловами, блок инÑÑÑÑкÑий не Ð²Ð²Ð¾Ð´Ð¸Ñ Ð½Ð¾Ð²ÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи. ХоÑÑ "оÑделÑно ÑÑоÑÑие" блоки не ÑвлÑÑÑÑÑ Ð½Ð°ÑÑÑением ÑинÑакÑиÑа, не ÑÑÐ¾Ð¸Ñ Ð¸ÑполÑзоваÑÑ Ð¾ÑделÑно ÑÑоÑÑие блоки в JavaScript, поÑÐ¾Ð¼Ñ ÑÑо они не делаÑÑ Ñо, Ñего Ð²Ñ Ð¾Ñ Ð½Ð¸Ñ
ожидаеÑе, еÑли Ð²Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑе, ÑÑо они бÑдÑÑ ÑÐµÐ±Ñ Ð²ÐµÑÑи аналогиÑно блокам в C или Java. ÐапÑимеÑ:
var x = 1;
{
var x = 2;
}
console.log(x); // вÑÐ²Ð¾Ð´Ð¸Ñ 2
ТÑÑ Ð²ÑводиÑÑÑ 2, поÑÐ¾Ð¼Ñ ÑÑо опеÑаÑÐ¾Ñ var x внÑÑÑи блока - в Ñой же облаÑÑи видимоÑÑи, ÑÑо и опеÑаÑÐ¾Ñ var x пеÑед блоком. Ð C или Java подобнÑй код вÑвел Ð±Ñ 1.
С 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 (иденÑиÑикаÑÐ¾Ñ 'c' Ñже бÑл обÑÑвлен) поÑÐ¾Ð¼Ñ ÑÑо она Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвлена ÐµÐ´Ð¸Ð½Ð¾Ð¶Ð´Ñ Ð²Ð½ÑÑÑи блока.
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-block > |