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

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

Жанры

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

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

Место под солнцем

Гавриил Одинокий
Старинная литература:
прочая старинная литература
6.00
рейтинг книги
Место под солнцем

Российская империя в сравнительной перспективе

Коллектив авторов
Научно-образовательная:
история
политика
5.00
рейтинг книги
Российская империя в сравнительной перспективе

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Каратила

Поповский Андрей Владимирович
Детективы:
боевики
6.50
рейтинг книги
Каратила

Лекарь Империи 2

Карелин Сергей Витальевич
2. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.80
рейтинг книги
Лекарь Империи 2

Лекции профессора Московской Духовной Академии А. И. Осипова

Осипов Алексей Ильич
Религия и эзотерика:
религия
5.00
рейтинг книги
Лекции профессора Московской Духовной Академии А. И. Осипова

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

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.43
рейтинг книги
Точка Бифуркации

Рассказы старых переплетов

Белоусов Роман Сергеевич
Документальная литература:
биографии и мемуары
прочая документальная литература
5.00
рейтинг книги
Рассказы старых переплетов

Информационные технологии в СССР. Создатели советской вычислительной техники

Малиновский Борис Николаевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Информационные технологии в СССР. Создатели советской вычислительной техники

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

Восточный массаж

Ханников Александр Александрович
Дом и Семья:
здоровье и красота
7.00
рейтинг книги
Восточный массаж

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V

Газлайтер. Том 9

Володин Григорий Григорьевич
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9