Современная альтернатива явному замыканию (которое может показаться немного сложным для чтения, когда у вас есть двойная функция) - Function#bind
.После того, как вы взломали поддержку для браузеров, которые еще не используют ECMAScript Fifth Edition, вы можете сказать:
for (var i=0; i<3; i++) {
setTimeout(function(i) { console.log(i); }.bind(window, i), 500);
}
window
- это значение, которое будет this
быть внутри функции (вам не нужно this
здесь, поэтому мы просто используем глобальный объект по умолчанию).В случае, когда вы просто вызываете другую функцию / метод, как здесь с console.log
, вы можете использовать это для полного удаления выражения функции:
for (var i=0; i<3; i++) {
setTimeout(console.log.bind(console, i), 500);
}