Почему когда counter() вставить в $('.txt').on('click'...) - не работает?
Вы пытаетесь сделать замыкание на переменную, которой в этот момент еще нет. Соблюдайте логику выполнения - сначала определяем counter и лишь затем делаем на него замыкание:
function makeCounter() {
var currentCount = 0;
return function() {
return ++currentCount;
};
}
var counter = makeCounter();
$('.txt').on('click', function(){
console.log($(this).text());
counter();
});
Если Вам нужно сохранить последний элемент, на который кликнули - код может выглядеть вот так:
$(function(){
var $lastClicked;
$('.txt').on('click', function(){
$lastClicked = $(this);
});
});
Главное помните - не засоряйте глобальную область видимости без особой необходимости.