Просмотр полной версии : почему нельзя объявить переменную и в ней использовать совмещенные операторы?!!
Здравствуйте господа,
изучаю JS и вроде все хорошо (не все понимаю но читаю и разбираюсь до болтика), но этот вопрос еще с вчерашнего вечера меня беспокоит.
Почему когда я объявляю переменую, не могу использовать совмещенные операторы?
банальный пример:
var i = 10;
var num += i;
alert(num);
т.е. естественно, придется либо ее не объявлять, либо объявить отдельно как переменную i.
с чем связанно, и как это понимать?
Просьба не обзываться дураком и прочими словами, а то есть такие тут любители. Я скажу спасибо даже за то, что Вы, будете культурны.
в том и дело что изначально у num нет начального значения.
я хочу как можно короче записать выражение, т.е.
1) объявить переменную num
2) сказать num что она равняется i -- 10
3) сказать что num + i = 20
и в конце вывести значение num / 20
как я понял на деле это нельзя...
банальный пример:
var i = 10;
var num += i;
alert(num);
к чему i прибавляете, можно узнать?
то есть реализовать задуманное придется так:
var i = 10;
var num = i;
num += i;
alert(num);
весь вопрос в том, зачем лишние "движения" ((
в чем логика не возможности? в том что это не учтено в спеке или потому что у меня логика странная?
в том и дело что изначально у num нет начального значения.
я хочу как можно короче записать выражение, т.е.
1) объявить переменную num
2) сказать num что она равняется i -- 10
3) сказать что num + i = 20
и в конце вывести значение num / 20
как я понял на деле это нельзя...
вот короче
var i = 10;
var num = i + i;
у меня логика странная?
да. вы записываете в программу "num равно неизвестное плюс i", а ожидаете что программа сделает "num равно i плюс i"
var i = 10;
var num = i + i;
alert(num);
вообщем нельзя одновременно использовать совмещенный оператор и объявить переменную.
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;
Высасывание может работать лишь с оператором = (или без него естественно) по скольку предполагается что до начала выполнения скрипта переменные НЕ МОГУТ иметь ни каких значений, а операторы += -= и.т.п. рабтают именно со значениями переменных. Иными словами браузер пытаясь провести высасывание встречает не ожидаемый знак за место = и выдает синтаксическую ошибку.
Gvozd да, да все верно, я ожидал что интерпретатор меня поймет))
:)
Всем большое спасибо!
Mахmахmахimus, отдельная благодарность, жаль что Вы сказали, нет в учебнике по Js на этом сайте.
Теперь мне всё понятно, подведя итог можно утверждать что:
использование оператора var не возможно одновременно с совмещенными операторами.
Mахmахmахimus
12.02.2012, 21:44
alexben,
да,а еще декларирование функций тоже высасывается)
да я уже понял что мне придется трудновата...
ведь я на самом деле ожидал результат от того что написал.
А получил ошибку.
Конечно это написано наверно в спецификации, но мне страшно ее открывать :) Читаю что написано на сайте, " Основы JavaScript" а потом шлифую книгой с "носорогом" - и там я кстати речи тоже не было.
и "высасывает" их кверху области видимости
это называется высасывание
да,а еще декларирование функций тоже высасывается)
Сам придумал термин?
Это твой "профессиональный" термин?)
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/
Сам придумал термин?
Это твой "профессиональный" термин?)
ну хорошо, что хоть не отсасывание пишет
Нет, это так называется) "Высасывание javascript"
"Hosting javascript"
Пруфлинк?
Mахmахmахimus
12.02.2012, 23:44
Пруфлинк?
держи (http://google.ru)
ну хорошо, что хоть не отсасывание пишет
поправь меня если я не верно называю, я начну правильно называть.
alexben,
учись лучше вот по этому!
http://learn.javascript.ru/
как раз это первым делом :)
очень нравится как изложен материал (причем актуальный)
ну а книга с носорогом скорее для уточнения и полировки знаний.
Вообщем не грамма не жалею о таком методе изучения js
держи
Давай нормальный пруфлинк, или пиздабол.
Я за тебя гуглить придуманный тобою "термин" не собираюсь.
Mахmахmахimus
13.02.2012, 00:23
Gvozd,
в смысле "или пиздабол" ты задал вопрос, я тебе ответил, если тебе моих слов не достаточно то за каким хуем было спрашивать?!
ты задал вопрос, я тебе ответил
ссылка на главную страницу гугла - не ответ
если тебе моих слов не достаточно то за каким хуем было спрашивать?!
да, недостаточно, и поэтому я запросил пруфлинк
в смысле "или пиздабол"
Да в самом прямом.
Приведи пару прямых ссылок на авторитетные материалы, где также используется именно этот термин.
Это подтвердит истинность твоих слов.
Mахmахmахimus
13.02.2012, 00:43
Сам придумал термин?
Это твой "профессиональный" термин?)
Нет, это так называется) "Высасывание javascript"
"Hosting javascript"
Пруфлинк?
Я не буду тебе давать пруфлинк потому что не хочу искать! При желании ты можешь найти в гугле на что я тонко намекнул дав на него ссылку. Авторитетные источники ему подавай, на хуй ты мне всрался, ты поинтересовался почему я слово употребил я тебе ответил, не наглей" Думаешь я тебе чего-то искать буду чтобы в чем то убедить? Если моих слов не достаточно чтобы придти к какому-то выводу, то ищи в гугле, у меня нет цели тебя в чем то убеждать.
Так же это называют "выталкиванием" или "поднятием" запоминай, пригодится. на инглише hoisting - поднятие, на сленге высасывание.
Так же это называют "выталкиванием" или "поднятием" запоминай, пригодится. на инглише hoisting - поднятие, на сленге высасывание.
ну, теперь вы хоть написали правильно этот термин на английском, а не hosting как изначально.
И в таком виде я смог найти и этот термин, и его употребление.
И я нашел несколько переводов этого термина(в JavaScript, а не в сленге) как "поднятие", и ни одного как "высасывание"
Mахmахmахimus
13.02.2012, 01:32
а не hosting как изначально.
млять, надо клаву зарядить). Да я щас погуглил, поднятие больше где используется, думаю переходить на него.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot