Не понимание предназначения bind. История такова:
Читаю учебник. Там приводится вот такой код для привязки контекста:
function bind(func, context) {
return function() {
return func.apply(context, arguments);
};
}
var user = {
firstName: "Вася",
sayHi: function() {
alert( this.firstName );
}
};
setTimeout(bind(user.sayHi, user), 1000);
Суть кода в том, что бы пока этот таймер отсчитывал милисекунды, и в этот момент переменная изменилась, то все равно должна вывестить переменная, которая была в момент запуска, а не последнее значения до результата выполнения таймера.
После этого кода автор пишет
Теперь всё в порядке!
Но вот только ничего не в порядке.
Этот код прекрасно демонстрирует неисправность кода выше
https://codepen.io/CitizenOne/pen/aVdGQy
Просто во время работы таймера тыкнете на красный квадрат, то есть так, что бы во время работы переменная изменилась. Хотя по идее всегда должно выводиться "Вася", а не "Вова" если мы тыкнем на красный квадрат
Источник -
https://learn.javascript.ru/bind#решение-2-bind-дл...