Ваш конкретный случай можно просто исправить, чтобы он работал:
<script type="text/javascript">
var myButton = document.getElementById("myButton");
var myMessage = "it's working";
myButton.onclick = function() { alert(myMessage); };
</script>
Этот пример будет работать, потому что анонимная функция, созданная и назначенная в качестве обработчика для элемента, будет иметь доступ к переменным, определенным в контексте, в котором она была создана.
Для записи обработчик (который вы назначаете через установку свойства onxxx) ожидает, что будет принят единственный аргумент, то есть объект события, передаваемый DOM, и вы не можете принудительно передать туда другой аргумент