setInterval - Обьясните в чем разница?? Что дает bind .оба варианта работают. Почему tesla.moveRight вызывается как функция, и не вызывается
setInterval( function() {
let t = Math.floor(Math.random() * (200-0+1));
tesla.moveRight(t)
}, 800 );
setInterval( function() {
let t = Math.floor(Math.random() * (200-0+1));
tesla.moveRight.bind(tesla, t)()
}, 800 );
Ответы (1 шт):
Автор решения: santavital
→ Ссылка
В данном случае разницы нет; Это кусок кода из задачи на асинхронный вызов setInterval; Если первый вариант поместить внутрь цикла и объявление t вынести перед циклом
var t;
for (t=1; t<=9; t++) {
setInterval( function() {
/* let t = Math.floor(Math.random() * (200-0+1)); комментируем для примера */
tesla.moveRight(t)
}, 800 );
}
То из-за того что вызов асинхронный в момент вызова цикл уже закончится t будет = 10 и каждый tesla.moveRight(t) продвинет машину на 10; а в случае с .bind создается новый экземпляр функции и tesla.moveRight(t) продвинет машину на 1, 2, 3, 4 ... 9