Передача параметра в JavaScript setTimeout (замыкания)

Не работает:

for (x=0; x<id.length; x++) {
setTimeout(function(){date_del(id[x])},1000);
};

Вариант 1 (не работает для объектов):

date_del = id[x];
var timer = setTimeout("date_del("+date_del+")",1000);

Вариант 2:

function getfunc(x){
 return function(){
   date_del(id[x]);
 }
}
for (x=0; x<id.length; x++) {
  setTimeout(getfunc(x),1000);
};

Вариант 3 (замыкания):

for(var x=0;x<id.length;x++){
  setTimeout(function(i){
    return function(){
        date_del(id[i])}
    }(x),1000);
}
/* Вы передаете ссылку на переменную x.
   После завершения цикла она равна id.length,
   а, значит, такого элемента в массиве нет */

.