19.04.2014, 07:24
|
Интересующийся
|
|
Регистрация: 19.04.2014
Сообщений: 25
|
|
Проблемы с пониманием 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 возвращает значение. Какое значение, куда возвращает, что вообще он делает?
Заранее спасибо за помощь.
|
|
19.04.2014, 07:59
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от pshcolnyy
|
Я хотел бы у вас спросить как работает код setTimeout , точнее не как, а когда, я вроде никак не активирую эту часть кода, т.к. он не входит в функцию.
|
Код выполняется по мере загрузки страницы. Как только браузер загрузит очередной блок script то код из него выполняется, после выполнения идет загрузка остальной части страницы. Поэтому в этом коде тайймер запустит в момент загрузки страницы.
Сообщение от pshcolnyy
|
Вот в другом коде js я видел , что в функции вставляются какие-то параметры и я вообще не понимаю, что это за параметры, для чего они, просто я видел, что в параметры функции вставляют совсем нелогичные для меня слова, которые потом не встречаются в html коде, а только используются посреди функции и тут моя логическая цепочка взрывается.
|
А там что ли в твоем учебнике до этого не было описано как функции работают? Ну, вот тут почитай: http://learn.javascript.ru/function-basics
Сообщение от pshcolnyy
|
Что делает метод return, я поискал в интернете и меня совсем не устраивает слова, что return возвращает значение. Какое значение, куда возвращает, что вообще он делает?
|
Завершает функцию и возвращает значение после return в то место кода, где функция была вызвана... Там по той ссылке, что я привел выше об этом вроде написано.
А вообще странно что ты задаешь такие вопросы. В хорошем учебнике материал должен излагаться последовательно и таких вопросов по идее возникать не должно. То ли ты пытаешься бежать впереди паровоза, то ли учебник фиговый. Например на этом сайте есть свой учебник по JS:
http://learn.javascript.ru
Может попробуешь его?
Последний раз редактировалось jsnb, 19.04.2014 в 08:08.
|
|
19.04.2014, 10:25
|
Интересующийся
|
|
Регистрация: 19.04.2014
Сообщений: 25
|
|
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 точнее я не понимаю как она знает где нужно ей активироваться, если как вы говорите код выполняется по мере загрузке как эта часть кода знает где выполняться.
Я смотрел и не видел как вызывают эту функцию, а другие видел.
(код в файле).
|
|
19.04.2014, 11:12
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от pshcolnyy
|
1) АААА я кажется начал понимать . Этот код извлекает данные из rockImg и после таймера меняет на rock, но все равно не понимаю как я активирую этот каждый когда я нажимаю на картинку. Я понимаю если бы он активировался один раз после загрузки страницы, но каждый когда я нажимаю на картинку таймер перезапускается.
|
В приведенном коде таймер не перезапускается при нажатии на картинку, он запускается 1 раз и сработает через 300 секунд после загрузки страницы. При клике по картинке запускается функция touchRock которая спрашивает имя и выводит алерт, а потом заменяет атрибут src и изображения. Функция запускается потому что прописана в onclick атрибут тега img.
Сообщение от pshcolnyy
|
Если следовать моей логите то эта функция будет срабатывать только тогда когда ее объявят в html коде с параметрами которые должна обработать функция.
|
Не когда объявлена, а когда вызывается. Вызывается функция круглыми скобками, в которых указываются значения аргументов. Ну или через apply или call. Ну или косвенно как-нибудь, через таймер или событие.
Сообщение от pshcolnyy
|
Пока я смотрел вот этот код то я не понял как активируется функция parsedonuts точнее я не понимаю как она знает где нужно ей активироваться, если как вы говорите код выполняется по мере загрузке как эта часть кода знает где выполняться.
|
Функция parseDonuts вызывается в функции updateOrder при присвоении значений переменным numCakeDonuts и numGlazedDonuts.
А функция updateOrder вызывается при генерации события change инпутов, которое происходит при потере фокуса у инпутов при условии что данные в нем изменились.
В общем, тебе надо основы учить. А толку от копания в таком коде не много будет. Если в твоей книге сразу без подготовки такой код выдают, то это плохая книга. Ну, или не расчитаная на новичков. А ты, судя по вопросам, программированием особо не занимался до этого.
|
|
19.04.2014, 11:13
|
Профессор
|
|
Регистрация: 19.11.2013
Сообщений: 150
|
|
Я, кстати, раза 4 пытался прочесть до конца эту книгу. Вроде дальше 100 страниц не получалось, забивал. Также пытался тут осваивать js.
Начал в итоге практиковать jquery.
Мое личное мнение, js было бы интересно изучать в 2007. А сейчас в голове не улаживаются мысли, что нужно знать и jquery и php и просто времени не хватит на это все. Поэтому сразу перешел к jquery.
Это так оффтопик нуба, не хочу чтобы повлиял на тебя пост. Удачи в практике
|
|
19.04.2014, 11:26
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от hhh
|
Поэтому сразу перешел к jquery.
|
jQuery это не язык. Знать jQuery и не знать JS, это всё равно что решать квадратные уравнения, при этом не зная что такое умножение и деление. Ну а чо, на калькуляторе крестик или слеш тыкнул, числа набрал и оно вывело нужный результат, удобно. Только дальше решения школьных задачек при таком подходе будет проблематично продвинуться, да и при перестановке слагаемых тоже начнутся проблемы.
P.S. Могу разочаровать, помимо JQ и PHP придется еще кучу всего учить. И причем делать это постоянно. Специфика отрасли.
|
|
19.04.2014, 11:40
|
Профессор
|
|
Регистрация: 19.11.2013
Сообщений: 150
|
|
Ну я работаю только с одной cms и сам умею думать, что мне надо изучать.
|
|
19.04.2014, 23:14
|
Интересующийся
|
|
Регистрация: 19.04.2014
Сообщений: 25
|
|
я понял насчет вопроса 3 и 2 , но в упор не понимаю 1. Вы говорите, функция прописана в теге img. Да, она там прописана, но функция заканчивается до setTimeout. Если я правильно всё понимаю функция же заканчивается вот такими скобками } ?
|
|
20.04.2014, 03:27
|
Профессор
|
|
Регистрация: 15.03.2014
Сообщений: 561
|
|
Сообщение от pshcolnyy
|
я понял насчет вопроса 3 и 2 , но в упор не понимаю 1. Вы говорите, функция прописана в теге img. Да, она там прописана, но функция заканчивается до setTimeout. Если я правильно всё понимаю функция же заканчивается вот такими скобками } ?
|
Ну да, setTimeout не входит в функцию, поэтому таймер запустится при загрузке сраницы, а при клике будет вызываться функция. Соответственно таймер перезапускаться не будет.
|
|
20.04.2014, 06:55
|
Интересующийся
|
|
Регистрация: 19.04.2014
Сообщений: 25
|
|
но он перезапускается. И я всё-таки бросил тот учебник т.к в следующей главе они в наглую изменили код страницы и ничего не объяснили
|
|
|
|