В чем проблема? Какая реальная задача стоит?
Так-то можно просто координаты нажатий отлавливать и слать на сервер. Только вы потом запутаетесь в них. А всё потому, что нужно отталкиваться от реальной проблемы, которую нужно решить.
Области видимости в JavaScript легко гуглятся. Вам нужно просто прочитать 2-3 статьи, вникнуть, и этого будет достаточно.
А в функциях setInterval и setTimeout лучше не использовать строку вместо функции. Также лучше отказаться от eval. Также желательно отказаться от всяких onclick непосредственно в тегах. А также не подключать скрипты через создание тега script. Всё это грязные приёмы, по сути лазейки, которые нужны для очень специфических целей и являются плохим тоном в программировании.
Также - это как? Вы берете чужой код, который решает задачу, отличную от вашей. Поэтому его нужно переделать, то есть адаптировать под ваши нужды. Нельзя просто взять и скопипастить, чтобы при этом у вас всё было и вам за это ничё не было. Скажите, что за задача - тогда, возможно, можно будет что-то придумать.
Ага, и брут пароля по пользователям заставит всех пользователей восстанавливаться. Плюс пользователь под брутом будет практически забанет, даже если брут из Китая.
Дима Турков, в месте, где должна быть кнопка, появляется ещё одна. И что угодно может быть где угодно. Или, скажем, было две кнопки, а остаётся одна. То есть нарушается структура, из-за этого сложнее понять, что есть что.
Александр, ну, это пример был. Понятное дело, что если у вас каждый день сделки на миллион долларов, то абонплата должна быть несколько миллионов. Суть в том, что нужен компромисс. То есть вы вправе что-то требовать за такую цену. Но делать из провайдера раба тоже нет смысла, потому что ситуация обратная получается. Взаимовыгодная сделка должна быть.
Алексей Ярков, согласен. Только я привел пример, когда нужен доступ из другого окна. Сообщения - асинхронно (не всегда удобно). Геттеры - по сути те же var, только через function. Хранилище - еще больший изврат.
Алексей Ярков, зачем же использовать свойства самого окна? Таким образом можно всякие scrollY использовать в качестве переменной, а потом удивляться, почему там всё меняется. Даже во времена var код было принято оборачивать в функцию для красоты, удобства и избегания как раз таких вот ошибок.