Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.02.2012, 19:38
Интересующийся
Отправить личное сообщение для alexben Посмотреть профиль Найти все сообщения от alexben
 
Регистрация: 11.02.2012
Сообщений: 26

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

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

т.е. естественно, придется либо ее не объявлять, либо объявить отдельно как переменную i.
с чем связанно, и как это понимать?
Просьба не обзываться дураком и прочими словами, а то есть такие тут любители. Я скажу спасибо даже за то, что Вы, будете культурны.
Ответить с цитированием
  #2 (permalink)  
Старый 12.02.2012, 20:11
Интересующийся
Отправить личное сообщение для alexben Посмотреть профиль Найти все сообщения от alexben
 
Регистрация: 11.02.2012
Сообщений: 26

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


и в конце вывести значение num / 20
как я понял на деле это нельзя...
Ответить с цитированием
  #3 (permalink)  
Старый 12.02.2012, 20:12
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,125

Цитата:
банальный пример:
var i = 10;
var num += i;
alert(num);
к чему i прибавляете, можно узнать?
Ответить с цитированием
  #4 (permalink)  
Старый 12.02.2012, 20:17
Интересующийся
Отправить личное сообщение для alexben Посмотреть профиль Найти все сообщения от alexben
 
Регистрация: 11.02.2012
Сообщений: 26

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

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


весь вопрос в том, зачем лишние "движения" ((
в чем логика не возможности? в том что это не учтено в спеке или потому что у меня логика странная?
Ответить с цитированием
  #5 (permalink)  
Старый 12.02.2012, 20:18
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,125

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


и в конце вывести значение num / 20
как я понял на деле это нельзя...
вот короче
var i = 10;
var num = i + i;
Ответить с цитированием
  #6 (permalink)  
Старый 12.02.2012, 20:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

Сообщение от alexben
у меня логика странная?
да. вы записываете в программу "num равно неизвестное плюс i", а ожидаете что программа сделает "num равно i плюс i"
var i = 10;
var num = i + i;
alert(num);
Ответить с цитированием
  #7 (permalink)  
Старый 12.02.2012, 20:25
Интересующийся
Отправить личное сообщение для alexben Посмотреть профиль Найти все сообщения от alexben
 
Регистрация: 11.02.2012
Сообщений: 26

вообщем нельзя одновременно использовать совмещенный оператор и объявить переменную.
var num = i + i; - это естественно я знал.
Ответить с цитированием
  #8 (permalink)  
Старый 12.02.2012, 20:26
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

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

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

var q += 2;

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


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

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

то есть
var q = 1;

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




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

Последний раз редактировалось Mахmахmахimus, 12.02.2012 в 20:40.
Ответить с цитированием
  #9 (permalink)  
Старый 12.02.2012, 20:28
Интересующийся
Отправить личное сообщение для alexben Посмотреть профиль Найти все сообщения от alexben
 
Регистрация: 11.02.2012
Сообщений: 26


Gvozd
да, да все верно, я ожидал что интерпретатор меня поймет))

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

Последний раз редактировалось alexben, 12.02.2012 в 20:38.
Ответить с цитированием
  #10 (permalink)  
Старый 12.02.2012, 20:44
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск