Код : // js start console.log('js start'); var hash = { 'set' : function(val){ window.location.hash = val }, 'log' : function(){ console.log('Hash log: '+ window.location.hash) }, 'bind': function(){ $(window).bind('hashchange', this.log) } }; // set hash.set('hash0'); hash.set('hash1'); hash.set('hash2'); hash.set('hash3'); // bind hash.bind(); // js end console.log('js end'); Резултат : js start js end Hash log: #hash3 Hash log: #hash3 Hash log: #hash3 Hash log: #hash3 1. Консолим запуск. 2. Меняем хэш 4 раза. 3. Вешаем обработчик. 4. Консолим завершение. Какого черта тут происходит? Почему обработчик вообще сработал? (Откуда ему знать что я сделал до его навешивания?) Почему хэш в консоле последний? (Ведь ни каких замыканий тут нет!) Javascript - это скриптовый язык или где? http://jsfiddle.net/ghTP9/