обернуть в замыкание
function b(a) {
return a * a;
}
for (a = 0; a < 5; a++) {
c = a;
if (a == 3) {
(function(a){
setTimeout(function() {
c = b(a);
alert(c);
//как сделать чтоб тут алерт выполнился когда а = 3;?
// а то выполняется когда уже а = 5
}, 5000);
})(a);
}
alert(c);
}