Как я могу остановить Visual Studio Test Runner, когда тест зависает

Другим распространенным применением закрытий является связывание 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 с помощью функции » для конкретного примера.

37
задан citykid 3 December 2014 в 22:25
поделиться