@boga-net

Как понимать такое объявление переменных: var = var = false?

var someVar = 'someValue',
  someVar2 = someVar3 = false,
  speed = baseSpeed = 10,
  ....


Впервые вижу такую запись и она меня озадачила. Получается, что объявляем две переменных и каждой присваиваем одно значение ? То есть это равносильно :

var someVar2 = false,
  someVar3 = false,
  speed = 10,
  baseSpeed  = 10;


?
  • Вопрос задан
  • 388 просмотров
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Получается, что объявляем две переменных <...> То есть это равносильно

Не получается, не равносильно. Объявляется одна переменная. Вторая - выполняется лишь присваивание. И если - ВНИМАНИЕ - переменной с таким именем нет в текущей области видимости, будет выполнено присваивание переменной из внешней области видимости. Это, как нетрудно понять, отличный источник потенциальных багов (переменная, которую вроде бы никто не трогал, внезапно своё значение изменила). Ну а если такой переменной ни в одной из внешних областей видимости нет, будет создана глобальная переменная.

Короче, подобный код - безграмотный (а в строгом режиме, при отсутствии второй переменной в какой-либо из доступных областей видимости - и вовсе нерабочий, упадёт с ошибкой).
Ответ написан
rockon404
@rockon404
Frontend Developer
Все верно для объявления через запятую. Во втором варианте производится только присваивание и работать без явного объявления оно будет только в старом режиме.

Лучше объявлять переменные так:
var someVar2 = false;
var someVar3 = false;
var speed = 10;
var baseSpeed = 10;

так проще вносить изменения в код и меньше шансов допустить ошибку вроде этой:
var someVar2 = false,
  someVar3 = false;
  speed = 10,
  baseSpeed  = 10;

или этой:
var someVar2 = false,
  someVar3 = false,
  speed = 10,
  baseSpeed  = 10,
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
«А — ассоциативность»

Ассоциативность определяет порядок, в котором обрабатываются операторы с одинаковым приоритетом. Например, рассмотрим выражение:

a OP b OP c

Левая ассоциативность (слева-направо) означает, что оно обрабатывается как (a OP b) OP c, в то время как правая ассоциативность (справа-налево) означает, что они интерпретируются как a OP (b OP c). Операторы присваивания являются право-ассоциативными, так что вы можете написать:

a = b = 5;

с ожидаемым результатом, что a и b будут равны 5. Это происходит, потому что оператор присваивания возвращает тот результат, который присваивает. Сначала b становится равным 5, затем a принимает значение b.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы