Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы с пониманием js (https://javascript.ru/forum/misc/46675-problemy-s-ponimaniem-js.html)

pshcolnyy 19.04.2014 07:24

Проблемы с пониманием js
 
Всем привет. Недавно я начал изучать js по книге Изучаем JavaScript headfirst, но столкнулся с несколькими проблемами, точнее не проблемами, просто непонятно как все это работает. Можете пожалуйста объяснить некоторые вещи.


1) Вот код из книги:

Код:

<html>
        <head>
                <title>iRock - Виртуальный любимец Rock</title>

               
<script type="text/javascript">
			function touchRock() {
	var userName = prompt("Как вас зовут?", "Введите ваше имя.");
  		if (userName) {
		alert("Рад вас видеть, " + userName + ".");
		document.getElementById("rockImg").src = "rock_happy.png";
					} 
				}
			setTimeout("document.getElementById('rockImg').src='rock.png';", 300000)
		</script>

        </head>
        <body onload="alert('Hello, I am your pet rock.');">
                <div style="margin-top:100px; text-align:center;">
                        <img id="rockImg" src="rock.png" alt="iRock" style="cursor:pointer" onclick="touchRock()" />
                </div>
        </body>
</html>

на картинке rock_happy изображен улыбающийся камень, а на картинке rock изображен одинокий камень.

Я хотел бы у вас спросить как работает код setTimeout , точнее не как, а когда, я вроде никак не активирую эту часть кода, т.к. он не входит в функцию.

2)Вот в другом коде js я видел , что в функции вставляются какие-то параметры и я вообще не понимаю, что это за параметры, для чего они, просто я видел, что в параметры функции вставляют совсем нелогичные для меня слова, которые потом не встречаются в html коде, а только используются посреди функции и тут моя логическая цепочка взрывается.

3)Что делает метод return, я поискал в интернете и меня совсем не устраивает слова, что return возвращает значение. Какое значение, куда возвращает, что вообще он делает?


Заранее спасибо за помощь.

jsnb 19.04.2014 07:59

Цитата:

Сообщение от pshcolnyy (Сообщение 308356)
Я хотел бы у вас спросить как работает код setTimeout , точнее не как, а когда, я вроде никак не активирую эту часть кода, т.к. он не входит в функцию.

Код выполняется по мере загрузки страницы. Как только браузер загрузит очередной блок script то код из него выполняется, после выполнения идет загрузка остальной части страницы. Поэтому в этом коде тайймер запустит в момент загрузки страницы.


Цитата:

Сообщение от pshcolnyy (Сообщение 308356)
Вот в другом коде js я видел , что в функции вставляются какие-то параметры и я вообще не понимаю, что это за параметры, для чего они, просто я видел, что в параметры функции вставляют совсем нелогичные для меня слова, которые потом не встречаются в html коде, а только используются посреди функции и тут моя логическая цепочка взрывается.

А там что ли в твоем учебнике до этого не было описано как функции работают? Ну, вот тут почитай: http://learn.javascript.ru/function-basics

Цитата:

Сообщение от pshcolnyy (Сообщение 308356)
Что делает метод return, я поискал в интернете и меня совсем не устраивает слова, что return возвращает значение. Какое значение, куда возвращает, что вообще он делает?

Завершает функцию и возвращает значение после return в то место кода, где функция была вызвана... Там по той ссылке, что я привел выше об этом вроде написано.

А вообще странно что ты задаешь такие вопросы. В хорошем учебнике материал должен излагаться последовательно и таких вопросов по идее возникать не должно. То ли ты пытаешься бежать впереди паровоза, то ли учебник фиговый. Например на этом сайте есть свой учебник по JS:
http://learn.javascript.ru
Может попробуешь его?

pshcolnyy 19.04.2014 10:25

Вложений: 1
1) АААА я кажется начал понимать . Этот код извлекает данные из rockImg и после таймера меняет на rock, но все равно не понимаю как я активирую этот каждый когда я нажимаю на картинку. Я понимаю если бы он активировался один раз после загрузки страницы, но каждый когда я нажимаю на картинку таймер перезапускается.

2)
Код:

function showMessage(from, text) { // параметры from, text
 
  from = "** " + from + " **"; // здесь может быть сложный код оформления
  alert(from + '\n\n' + text);
}
showMessage('Маша', 'Привет!');
showMessage('Маша', 'Как дела?');

Вот тут если я правильно понимаю эту функцию то она обрабатывает(добавляет звёздочки и выводит в новое окно) то что потом будет написано в скобках функции showMessage.
Если следовать моей логите то эта функция будет срабатывать только тогда когда ее объявят в html коде с параметрами которые должна обработать функция.

3. Так кажется насчет return я всё понял.

4. Пока я смотрел вот этот код то я не понял как активируется функция parsedonuts точнее я не понимаю как она знает где нужно ей активироваться, если как вы говорите код выполняется по мере загрузке как эта часть кода знает где выполняться.
Я смотрел и не видел как вызывают эту функцию, а другие видел.

(код в файле).

jsnb 19.04.2014 11:12

Цитата:

Сообщение от pshcolnyy (Сообщение 308362)
1) АААА я кажется начал понимать . Этот код извлекает данные из rockImg и после таймера меняет на rock, но все равно не понимаю как я активирую этот каждый когда я нажимаю на картинку. Я понимаю если бы он активировался один раз после загрузки страницы, но каждый когда я нажимаю на картинку таймер перезапускается.

В приведенном коде таймер не перезапускается при нажатии на картинку, он запускается 1 раз и сработает через 300 секунд после загрузки страницы. При клике по картинке запускается функция touchRock которая спрашивает имя и выводит алерт, а потом заменяет атрибут src и изображения. Функция запускается потому что прописана в onclick атрибут тега img.

Цитата:

Сообщение от pshcolnyy (Сообщение 308362)
Если следовать моей логите то эта функция будет срабатывать только тогда когда ее объявят в html коде с параметрами которые должна обработать функция.

Не когда объявлена, а когда вызывается. Вызывается функция круглыми скобками, в которых указываются значения аргументов. Ну или через apply или call. Ну или косвенно как-нибудь, через таймер или событие.

Цитата:

Сообщение от pshcolnyy (Сообщение 308362)
Пока я смотрел вот этот код то я не понял как активируется функция parsedonuts точнее я не понимаю как она знает где нужно ей активироваться, если как вы говорите код выполняется по мере загрузке как эта часть кода знает где выполняться.

Функция parseDonuts вызывается в функции updateOrder при присвоении значений переменным numCakeDonuts и numGlazedDonuts.
А функция updateOrder вызывается при генерации события change инпутов, которое происходит при потере фокуса у инпутов при условии что данные в нем изменились.
В общем, тебе надо основы учить. А толку от копания в таком коде не много будет. Если в твоей книге сразу без подготовки такой код выдают, то это плохая книга. Ну, или не расчитаная на новичков. А ты, судя по вопросам, программированием особо не занимался до этого.

hhh 19.04.2014 11:13

Я, кстати, раза 4 пытался прочесть до конца эту книгу. Вроде дальше 100 страниц не получалось, забивал. Также пытался тут осваивать js.
Начал в итоге практиковать jquery.
Мое личное мнение, js было бы интересно изучать в 2007. А сейчас в голове не улаживаются мысли, что нужно знать и jquery и php и просто времени не хватит на это все. Поэтому сразу перешел к jquery.

Это так оффтопик нуба, не хочу чтобы повлиял на тебя пост. Удачи в практике:)

jsnb 19.04.2014 11:26

Цитата:

Сообщение от hhh (Сообщение 308367)
Поэтому сразу перешел к jquery.

jQuery это не язык. Знать jQuery и не знать JS, это всё равно что решать квадратные уравнения, при этом не зная что такое умножение и деление. Ну а чо, на калькуляторе крестик или слеш тыкнул, числа набрал и оно вывело нужный результат, удобно. Только дальше решения школьных задачек при таком подходе будет проблематично продвинуться, да и при перестановке слагаемых тоже начнутся проблемы.

P.S. Могу разочаровать, помимо JQ и PHP придется еще кучу всего учить. И причем делать это постоянно. Специфика отрасли.

hhh 19.04.2014 11:40

Ну я работаю только с одной cms и сам умею думать, что мне надо изучать.

pshcolnyy 19.04.2014 23:14

я понял насчет вопроса 3 и 2 , но в упор не понимаю 1. Вы говорите, функция прописана в теге img. Да, она там прописана, но функция заканчивается до setTimeout. Если я правильно всё понимаю функция же заканчивается вот такими скобками } ?

jsnb 20.04.2014 03:27

Цитата:

Сообщение от pshcolnyy (Сообщение 308461)
я понял насчет вопроса 3 и 2 , но в упор не понимаю 1. Вы говорите, функция прописана в теге img. Да, она там прописана, но функция заканчивается до setTimeout. Если я правильно всё понимаю функция же заканчивается вот такими скобками } ?

Ну да, setTimeout не входит в функцию, поэтому таймер запустится при загрузке сраницы, а при клике будет вызываться функция. Соответственно таймер перезапускаться не будет.

pshcolnyy 20.04.2014 06:55

но он перезапускается. И я всё-таки бросил тот учебник т.к в следующей главе они в наглую изменили код страницы и ничего не объяснили


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