let х = 1;
for(let х = х + 1; х < 5; х++)
console.log(x); // Выведет 2,3,4
{ // Начало блока, чтобы образовать область видимости новой переменной
let х = х + 1; // переменная х не определена, поэтому х+1 = NaN
console.log(x); // Выведет NaN
}
Переменные, объявленные с помощью инструкции var
, определены в любой точке функции, где они объявлены, но они не инициализируются, пока инструкция var
не будет выполнена фактически. То есть переменная существует (обращение к ней не вызывает исключение ReferenceError), но при попытке использовать переменную до инструкции var
она будет иметь значение undefined
. Переменные, объявляемые с помощью инструкции let
, действуют аналогично: если попытаться использовать переменную до инструкции let
(но внутри блока, где находится инструкция let
), переменная будет доступна, но она будет иметь значение undefined
.
Примечательно, что данная проблема отсутствует при использовании let
для объявления переменной цикла - просто сам синтаксис не позволяет использовать переменную до ее инициализации. Существует еще один случай использования инструкции let
, где отсутствует проблема использования переменной до ее инициализации. Блок, образуемый инструкцией let
(в противоположность объявлению переменной с помощью инструкции let
, показанному выше), объединяет блок программного кода с объявлением переменных для этого блока и их инициализацией. В этом случае переменные и выражения их инициализации заключаются в круглые скобки, за которыми следует блок инструкций в фигурных скобках:
let х=1, у=2;
let (х=х+1,у=х+2) { // Отметьте, что здесь выполняется сокрытие переменных
console.log(х+у); // Выведет 5
};
console.log(x+y); // Выведет 3
Важно запомнить, что выражения инициализации переменных let-блока не являются частью этого блока и интерпретируются в другой области видимости. В примере выше создается новая переменная х, и ей присваивается значение, на единицу больше, чем значение существующей переменной х.
Последний случай использования ключевого слова let
является разновидностью let-блока, в котором вслед за списком переменных и выражений инициализации в круглых скобках следует единственное выражение, а не блок инструкций. Такая конструкция называется let-выражением, а пример выше можно было переписать, как показано ниже:
let х=1, у=2;
console.log(let (х=х+1,у=х+2) х+у); // Выведет 5
Некоторые формы использования ключевых слов const
и let
(не обязательно все четыре, описанные здесь) в будущем наверняка будут включены в стандарт ECMAScript.
Версии JavaScript
В этой главе при упоминании какой-то определенной версии JavaScript подразумевается версия языка, реализованная проектом Mozilla в интерпретаторах Spider monkey и Rhino и в веб-броузере Firefox.
Некоторые расширения языка, представленные здесь, определяют новые ключевые слова (такие как let
), и, чтобы избежать нарушения работоспособности существующего программного кода, использующего эти ключевые слова, JavaScript требует явно указывать версию, чтобы иметь возможность использовать расширения. Если вы пользуетесь автономным интерпретатором Spidermonkey или Rhino, версию языка можно указать в виде параметра командной строки или вызовом встроенной функции version().
(Она ожидает получить номер версии, умноженный на сто. Чтобы получить возможность использовать ключевое слово let
, нужно выбрать версию JavaScript 1.7, т.е. передать функции число 170.) В Firefox указать номер версии можно в теге script:
********************
11.3. Присваивание с разложением
В версии Spidermonkey 1.7 реализована разновидность составных инструкций присваивания, известная как присваивание с разложением. (Вы могли встречать присваивание с разложением в языках программирования Python или Ruby.) При присваивании с разложением значение справа от знака «равно» является массивом или объектом («составным» значением), а слева указывается одно или более имен переменных с применением синтаксиса, имитирующего литерал массива или объекта.
Инструкция присваивания с разложением извлекает (разлагает на составляющие) одно или более значений из значения справа и сохраняет в переменных, указанных слева. Кроме того, как и обычный оператор присваивания, присваивание с разложением может использоваться для инициализации вновь объявляемых переменных в инструкциях var
и let
.
Читать дальше
Конец ознакомительного отрывка
Купить книгу