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,
да,а еще декларирование функций тоже высасывается)

alexben 12.02.2012 21:52

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

Gvozd 12.02.2012 22:06

Цитата:

Сообщение от Mахmахmахimus
и "высасывает" их кверху области видимости

Цитата:

Сообщение от Mахmахmахimus
это называется высасывание

Цитата:

Сообщение от Mахmахmахimus
да,а еще декларирование функций тоже высасывается)

Сам придумал термин?
Это твой "профессиональный" термин?)

Mахmахmахimus 12.02.2012 22:14

Цитата:

Сообщение от Gvozd
Это твой "профессиональный" термин?)

Нет, это так называется) "Высасывание javascript"
"Hosting javascript"

Mахmахmахimus 12.02.2012 22:14

alexben,
учись лучше вот по этому!
http://learn.javascript.ru/

Shaci 12.02.2012 23:06

Цитата:

Сообщение от Gvozd (Сообщение 157013)
Сам придумал термин?
Это твой "профессиональный" термин?)

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

Gvozd 12.02.2012 23:09

Цитата:

Сообщение от Mахmахmахimus
Нет, это так называется) "Высасывание javascript"
"Hosting javascript"

Пруфлинк?

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

Цитата:

Сообщение от Gvozd
Пруфлинк?

держи
Цитата:

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

поправь меня если я не верно называю, я начну правильно называть.

alexben 12.02.2012 23:56

Цитата:

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

Gvozd 13.02.2012 00:05

Цитата:

Сообщение от Mахmахmахimus
держи

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

Mахmахmахimus 13.02.2012 00:23

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

Gvozd 13.02.2012 00:27

Цитата:

Сообщение от Mахmахmахimus
ты задал вопрос, я тебе ответил

ссылка на главную страницу гугла - не ответ
Цитата:

Сообщение от Mахmахmахimus
если тебе моих слов не достаточно то за каким хуем было спрашивать?!

да, недостаточно, и поэтому я запросил пруфлинк
Цитата:

Сообщение от Mахmахmахimus
в смысле "или пиздабол"

Да в самом прямом.
Приведи пару прямых ссылок на авторитетные материалы, где также используется именно этот термин.
Это подтвердит истинность твоих слов.

Mахmахmахimus 13.02.2012 00:43

Цитата:

Сообщение от Gvozd
Сам придумал термин?
Это твой "профессиональный" термин?)

Цитата:

Сообщение от Mахmахmахimus
Нет, это так называется) "Высасывание javascript"
"Hosting javascript"

Цитата:

Сообщение от Gvozd
Пруфлинк?

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

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

Gvozd 13.02.2012 01:20

Цитата:

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

ну, теперь вы хоть написали правильно этот термин на английском, а не hosting как изначально.
И в таком виде я смог найти и этот термин, и его употребление.

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

Mахmахmахimus 13.02.2012 01:32

Цитата:

Сообщение от Gvozd
а не hosting как изначально.

млять, надо клаву зарядить). Да я щас погуглил, поднятие больше где используется, думаю переходить на него.


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