Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
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 подразумевается версия языка, реализованная проектом 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
.
Присваивание с разложением является простым и мощным инструментом при работе с массивами, и его особенно удобно использовать при работе с функциями, возвращающими массивы значений. Однако при использовании с объектами и вложенными объектами эта операция становится сложной и запутанной. Примеры, демонстрирующие простоту и сложность, приводятся ниже.
Следующий пример демонстрирует простоту присваивания с разложением при использовании с массивами значений:
let [х,у] = [1,2];
// То же, что и let х=1, у=2
[х,у] = [x+l,y+1];
// То же. что и х = х + 1, у = у+1
[х,у] = [у,х];
// Обмен значений двух переменных
console.log([х,у]);// Выведет [3,2]
Обратите внимание, как присваивание с разложением упрощает работу с функциями, возвращающими массивы значений:
// Преобразует координаты [х,у] в полярные координаты [r,theta]
function polar(x,y) {
return [Math.sqrt(x*x+y*y), Math.atan2(y,x)];
}
// Преобразует полярные координаты в декартовы координаты
function cartesian(r,theta) {
return [r*Math.cos(theta), r*Math.sin(theta)];
}
let [r,theta] = polar(1.0. 1.0); // r=Math.sqrt(2), theta=Math.PI/4
let [x,y] = cartesian(r,theta); // x=1.0, y=1.0
При выполнении присваивания с разложением количество переменных слева не обязательно должно совпадать с количеством элементов массива справа. Лишние переменные слева получат значения undefined, а лишние значения справа будут просто игнорироваться. Список переменных слева может включать дополнительные запятые, чтобы пропустить определенные значения справа:
let [х,у] = [1]; // х = 1, у = undefined
[х,у] = [1,2,3]; // х = 1, у = 2
[,х,,у] = [1,2,3,4]; // х = 2, у = 4
В JavaScript отсутствует синтаксическая конструкция, которая позволила бы присвоить переменной все оставшиеся или неиспользованные значения (как массив). Так, во второй строке в примере выше, отсутствует возможность присвоить переменной у остаток массива [2,3].
Читать дальшеИнтервал:
Закладка: