Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

}

Переменные, объявленные с помощью инструкции

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:

<script type=”application/JavaScript; version=1.8">

********************

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

Поделиться:
Популярные книги

Точка Бифуркации V

Смит Дейлор
5. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации V

Кодекс Охотника. Книга III

Винокуров Юрий
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Кодекс Охотника. Книга III

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

Последний Герой. Том 1

Дамиров Рафаэль
1. Последний герой
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Последний Герой. Том 1

Звездная Кровь. Экзарх III

Рокотов Алексей
3. Экзарх
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Экзарх III

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Неучтенный элемент. Том 8

NikL
8. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 8

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки

Старая школа рул

Ромов Дмитрий
1. Второгодка
Фантастика:
альтернативная история
6.00
рейтинг книги
Старая школа рул

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Я все еще князь. Книга XXI

Дрейк Сириус
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще князь. Книга XXI