Какова цель одиночных блоков кода в Javascript?
В Javascript вы можете иметь одиночные кодовые блоки, то есть блоки кода без if
, function
или что-то вроде предшествующего им, помещенные произвольно в код, например:
var a = 3,
b = 4;
{
a = 50;
b = 50;
}
alert(a + b); //alerts 100
Я знаю, что некоторые другие языки имеют это (я думаю, что С++ делает), и они используют его для управления областью: переменные, объявленные внутри одиночного блока кода, не могут быть доступны за его пределами. Но поскольку Javascript имеет область действия функции, а не область блока, вам необходимо использовать функцию самозапускания (function(){})()
для достижения того же эффекта.
Есть ли цель для этой конструкции? Вы когда-нибудь видели, чтобы кто-нибудь использовал его? Означает ли спецификация? Это просто побочный эффект грамматики, имеющей какое-то общее правило о кодовых блоках?
Ответы
Ответ 1
Как я узнал, после ответа на мой ответ за Как метки используются с операторами, которые не являются циклом?, одиночные кодовые блоки могут быть связаны с метками:
myLabel:
{
for(x in y) {
break myLabel;
}
}
Выломит не только цикл, но и внешний блок кода.
Ответ 2
Обновление (так как этот вопрос показывает высокий уровень в Google для "блока кода javascript" ):
С введением ключевого слова let
в ECMAScript 6 кодовые блоки также могут использоваться для ограничения объема переменных.
{
let x = 20;
alert(x) // 20
}
alert(x) // undefined
Ответ 3
Только читаемость кода, ничего более.
Они даже не дают вам преимуществ закрытия:
var c = 'fail';
{
var c = 123;
}
alert(c); //alerts 123
(посмотреть его в прямом эфире)
Ответ 4
Только читаемость. Кроме этого ничего. Не выполняйте не, так как это невозможно для будущего. Следующие радостно сломаются:
"use strict";
var a = 3,
b = 4;
{
a = 50;
b = 50;
}
alert(a + b); //alerts 100
Я использовал его сам, поскольку он позволял логически разделять функциональность, но больше не выполнялся из-за вышеперечисленного.