Не работает замыкание из урока
Пробую замыкание из урока
http://javascript.ru/basic/closure Первый же пример не работает.
<!doctype html>
<html>
<head>
<script type="text/javascript">
function addHideHandler(sourceId, targetId) {
var sourceNode = document.getElementById(sourceId)
var handler = function() {
var targetNode = document.getElementById(targetId)
targetNode.style.display = 'none';
}
sourceNode.onclick = handler
}
addHideHandler('test1', 'test2');
</script>
</head>
<body>
<input type="button" value="test1" id="test1"/>
<input type="button" value="test2" id="test2"/>
</body>
</html>
В консоли: Ошибка на строке sourceNode.onclick = handler; Cannot set property 'onclick' of null |
TheMilkMan,
потому скрипт уже есть а элементов ещё нет |
рони,
Почему, два input элемента же есть. |
TheMilkMan,
либо использовать window.onload либо ставить после элементов с которыми работает скрипт |
рони,
действительно, заработало после того как разместил код под html элементами. Спасибо! |
Цитата:
|
рони,
еще такой вопрос, в чем отличия?
function makeShout() {
var phrase = "Превед!"
var shout = function() {
alert(phrase);
}
phrase = "Готово!"
return shout;
}
makeShout(); // не работает
shout = makeShout();
shout(); // работает
|
TheMilkMan,
вам нужно понять что как раз таки работает - 13 и 15 строки функционально одинаковы -- они создают новую функцию -- только в первом случае результат никуда не сохраняется чтоб его можно было в дальнейшем использовать |
TheMilkMan,
function makeShout() {
var phrase = "Превед!"
var shout = function() {
alert(phrase);
}
phrase = "Готово!"
return shout;
}
makeShout()(); // создаём и сразу запускаем
shout = makeShout();
shout(); // работает
|
рони,
Спасибо, теперь понял! :) |
| Часовой пояс GMT +3, время: 20:17. |