Не работает замыкание из урока
Пробую замыкание из урока
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, время: 08:40. |