Каждое закрытие тайм-аута заканчивается самым последним значением для двух переменных, а не значением для текущей итерации.В коде есть только одна итерация, но я предполагаю, что это просто для публикации.Вы можете изменить его на что-то вроде:
for(var i = smileys.length-1; i >= 0; i--) {
(function(i)
{
var smileyRegex = smileys[i][0];
var smileySrc = smileys[i][1];
if(node.textContent.match(smileyRegex)) {
log('match');
window.setTimeout(function(){
log(node.innerHTML); log(node.innerHTML.replace(smileyRegex, '<img class="smiley_ext" src="'+smileySrc+'">'));
},1000);
}
})(i);
}
Таким образом, каждый шаг итерации имеет свой собственный набор переменных.Однако я не уверен, действительно ли вам нужен тайм-аут.