Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   почему нельзя объявить переменную и в ней использовать совмещенные операторы?!! (https://javascript.ru/forum/misc/25689-pochemu-nelzya-obyavit-peremennuyu-i-v-nejj-ispolzovat-sovmeshhennye-operatory.html)

alexben 12.02.2012 20:38

почему нельзя объявить переменную и в ней использовать совмещенные операторы?!!
 
Здравствуйте господа,
изучаю JS и вроде все хорошо (не все понимаю но читаю и разбираюсь до болтика), но этот вопрос еще с вчерашнего вечера меня беспокоит.
Почему когда я объявляю переменую, не могу использовать совмещенные операторы?

банальный пример:
var i = 10;
var num += i;
alert(num);

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

alexben 12.02.2012 21:11

в том и дело что изначально у num нет начального значения.
я хочу как можно короче записать выражение, т.е.
1) объявить переменную num
2) сказать num что она равняется i -- 10
3) сказать что num + i = 20


и в конце вывести значение num / 20
как я понял на деле это нельзя...

Shaci 12.02.2012 21:12

Цитата:

банальный пример:
var i = 10;
var num += i;
alert(num);

к чему i прибавляете, можно узнать?

alexben 12.02.2012 21:17

то есть реализовать задуманное придется так:

var i = 10;
 var num = i;
 num += i;
alert(num);


весь вопрос в том, зачем лишние "движения" ((
в чем логика не возможности? в том что это не учтено в спеке или потому что у меня логика странная?

Shaci 12.02.2012 21:18

Цитата:

Сообщение от alexben (Сообщение 156991)
в том и дело что изначально у num нет начального значения.
я хочу как можно короче записать выражение, т.е.
1) объявить переменную num
2) сказать num что она равняется i -- 10
3) сказать что num + i = 20


и в конце вывести значение num / 20
как я понял на деле это нельзя...

вот короче
var i = 10;
var num = i + i;

Gvozd 12.02.2012 21:21

Цитата:

Сообщение от alexben
у меня логика странная?

да. вы записываете в программу "num равно неизвестное плюс i", а ожидаете что программа сделает "num равно i плюс i"
var i = 10;
var num = i + i;
alert(num);

alexben 12.02.2012 21:25

вообщем нельзя одновременно использовать совмещенный оператор и объявить переменную.
var num = i + i; - это естественно я знал.

Mахmахmахimus 12.02.2012 21:26

оператор += оператор присваивания. Он смотрит что лежит слево от него, прибавляет к нему то что справо, и присваиавет полученый результат тому что слева.

но тут суть не в этом

var q += 2;

q в данный момент равна undefined, а undefined + 1 получится обьект NaN ; и по сути он то и должен засунуться в q.


Но дело в операторе var он по сути декларирует переменные.

var q = 1; например еще ДО выполнения кода браузер смотрит все var'ы и "высасывает" их кверху области видимости. это называется высасывание. Так вот, он высасывает их еще ДО выполнения кода. он создает переменную
q и делает её равной undefined
а на месте от куда он высосал это все, он просто убирает слово var. и начинает выполнение скрипта как ни в чем не бывало.

то есть
var q = 1;

превращается в
var q;
q = 1;




Высасывание может работать лишь с оператором = (или без него естественно) по скольку предполагается что до начала выполнения скрипта переменные НЕ МОГУТ иметь ни каких значений, а операторы += -= и.т.п. рабтают именно со значениями переменных. Иными словами браузер пытаясь провести высасывание встречает не ожидаемый знак за место = и выдает синтаксическую ошибку.

alexben 12.02.2012 21:28


Gvozd
да, да все верно, я ожидал что интерпретатор меня поймет))
:)
Всем большое спасибо!
Mахmахmахimus, отдельная благодарность, жаль что Вы сказали, нет в учебнике по Js на этом сайте.
Теперь мне всё понятно, подведя итог можно утверждать что:
использование оператора var не возможно одновременно с совмещенными операторами.

Mахmахmахimus 12.02.2012 21:44

alexben,
да,а еще декларирование функций тоже высасывается)


Часовой пояс GMT +3, время: 19:04.