Вход

Просмотр полной версии : почему нельзя объявить переменную и в ней использовать совмещенные операторы?!!


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
в том и дело что изначально у 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
у меня логика странная?
да. вы записываете в программу "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,
да,а еще декларирование функций тоже высасывается)

alexben
12.02.2012, 21:52
да я уже понял что мне придется трудновата...
ведь я на самом деле ожидал результат от того что написал.
А получил ошибку.
Конечно это написано наверно в спецификации, но мне страшно ее открывать :) Читаю что написано на сайте, " Основы JavaScript" а потом шлифую книгой с "носорогом" - и там я кстати речи тоже не было.

Gvozd
12.02.2012, 22:06
и "высасывает" их кверху области видимости
это называется высасывание
да,а еще декларирование функций тоже высасывается)
Сам придумал термин?
Это твой "профессиональный" термин?)

Mахmахmахimus
12.02.2012, 22:14
Это твой "профессиональный" термин?)
Нет, это так называется) "Высасывание javascript"
"Hosting javascript"

Mахmахmахimus
12.02.2012, 22:14
alexben,
учись лучше вот по этому!
http://learn.javascript.ru/

Shaci
12.02.2012, 23:06
Сам придумал термин?
Это твой "профессиональный" термин?)

ну хорошо, что хоть не отсасывание пишет

Gvozd
12.02.2012, 23:09
Нет, это так называется) "Высасывание javascript"
"Hosting javascript"
Пруфлинк?

Mахmахmахimus
12.02.2012, 23:44
Пруфлинк?
держи (http://google.ru)
ну хорошо, что хоть не отсасывание пишет
поправь меня если я не верно называю, я начну правильно называть.

alexben
12.02.2012, 23:56
alexben,
учись лучше вот по этому!
http://learn.javascript.ru/
как раз это первым делом :)
очень нравится как изложен материал (причем актуальный)
ну а книга с носорогом скорее для уточнения и полировки знаний.
Вообщем не грамма не жалею о таком методе изучения js

Gvozd
13.02.2012, 00:05
держи
Давай нормальный пруфлинк, или пиздабол.
Я за тебя гуглить придуманный тобою "термин" не собираюсь.

Mахmахmахimus
13.02.2012, 00:23
Gvozd,
в смысле "или пиздабол" ты задал вопрос, я тебе ответил, если тебе моих слов не достаточно то за каким хуем было спрашивать?!

Gvozd
13.02.2012, 00:27
ты задал вопрос, я тебе ответил
ссылка на главную страницу гугла - не ответ
если тебе моих слов не достаточно то за каким хуем было спрашивать?!
да, недостаточно, и поэтому я запросил пруфлинк
в смысле "или пиздабол"
Да в самом прямом.
Приведи пару прямых ссылок на авторитетные материалы, где также используется именно этот термин.
Это подтвердит истинность твоих слов.

Mахmахmахimus
13.02.2012, 00:43
Сам придумал термин?
Это твой "профессиональный" термин?)
Нет, это так называется) "Высасывание javascript"
"Hosting javascript"
Пруфлинк?

Я не буду тебе давать пруфлинк потому что не хочу искать! При желании ты можешь найти в гугле на что я тонко намекнул дав на него ссылку. Авторитетные источники ему подавай, на хуй ты мне всрался, ты поинтересовался почему я слово употребил я тебе ответил, не наглей" Думаешь я тебе чего-то искать буду чтобы в чем то убедить? Если моих слов не достаточно чтобы придти к какому-то выводу, то ищи в гугле, у меня нет цели тебя в чем то убеждать.

Так же это называют "выталкиванием" или "поднятием" запоминай, пригодится. на инглише hoisting - поднятие, на сленге высасывание.

Gvozd
13.02.2012, 01:20
Так же это называют "выталкиванием" или "поднятием" запоминай, пригодится. на инглише hoisting - поднятие, на сленге высасывание.
ну, теперь вы хоть написали правильно этот термин на английском, а не hosting как изначально.
И в таком виде я смог найти и этот термин, и его употребление.

И я нашел несколько переводов этого термина(в JavaScript, а не в сленге) как "поднятие", и ни одного как "высасывание"

Mахmахmахimus
13.02.2012, 01:32
а не hosting как изначально.
млять, надо клаву зарядить). Да я щас погуглил, поднятие больше где используется, думаю переходить на него.