Другим распространенным применением закрытий является связывание this
в методе с конкретным объектом, позволяющее ему вызываться в другом месте (например, обработчик события).
function bind(obj, method) {
if (typeof method == 'string') {
method = obj[method];
}
return function () {
method.apply(obj, arguments);
}
}
...
document.body.addEventListener('mousemove', bind(watcher, 'follow'), true);
Всякий раз, когда mousemove watcher.follow(evt)
.
Замыкания также являются неотъемлемой частью функций более высокого порядка, что позволяет использовать очень общую схему перезаписи нескольких аналогичных функций как одной функции более высокого порядка путем параметрирования несходных частей. В качестве абстрактного примера
foo_a = function (...) {A a B}
foo_b = function (...) {A b B}
foo_c = function (...) {A c B}
становится
fooer = function (x) {
return function (...) {A x B}
}
, где A и B - не синтаксические единицы, а строки исходного кода (не строковые литералы).
См. « Упорядочение моего javascript с помощью функции » для конкретного примера.