Создание области видимости переменной с помощью функции, которая создает и возвращает обработчик тайм-аута.
function create_timeout_handler(myDoctorId, dateYM) {
return function() {
myDB.markMonthsValuesAsUpdated2(myDoctorId, dateYM)
};
}
Затем вызовите эту функцию и передайте ей все, что нужно для определения области действия.
setTimeout( create_timeout_handler(myDoctorId, dateYM), Math.floor(Math.random()*5001));
Это потому, что каждая функция, которую вы давали setTimeout
, создавалась в одной и той же области видимости переменной, поэтому все они ссылались на одну и ту же переменную dateYM
, которая перезаписывалась в цикле.
Передача dateYM
другой функции, которая создает и возвращает обработчик, гарантирует, что каждый обработчик ссылается на переменную dateYM
, уникальную для каждого вызова create_timeout_handler
.