Коли користуватись критичними та частковими функціями в JavaScript

Я прочитав цю публікацію д-ра Добба про те, як виконувати функцію JavaScript та часткові функції. Це виглядає корисно, але мені цікаво (як випадковий розробник у JavaScript), якщо є стандартні ситуації, коли це регулярно використовується?

4
Каррінг походить від функціонального програмування . Використовуйте його, коли ви хочете застосувати композицію функцій. Часткове застосування - це частина імперативного програмування, де існують функції мульти-аргументів. Використовуйте його, коли ви хочете спеціалізувати функції або методи.
додано Автор ftor, джерело

2 Відповіді

Для початківців я особисто не рекомендую карінг у 99% випадків. Це може легко зробити код нечитабельним, якщо його використовувати неправильно.

Однак деякі програми, які я міг би назвати, будуть пов'язані з налаштуванням контексту функції. Наприклад, коли ви вперше виконуєте функцію currying з контекстом (щось інше, окрім об'єкта вікна тощо), ви можете мати функцію, яка застосовує певні розрахунки до властивостей вихідного об'єкта тощо, коли їх називають пізніше.

Друга ситуація буде, коли, наприклад, у вас є функція, яка приймає три аргументи. Елемент DOM, ім'я атрибута та його значення. Це може бути перетворено в функцію, яка може бути ініційована відповідним елементом, тоді кожен наступний виконання встановить атрибут до потрібного значення. Може бути корисним у випадках, коли у вас є численні умови, від яких залежать атрибути.

3
додано

Дуже поширеним сценарієм є створення обробників подій.

Наприклад, скажімо, у вас є документ із великою кількістю посилань, таких як:

    link

Say you want to have JavaScript go through and make all these links display a "You are now going to: <link_url>" dialog box on click. In that case, you could use code such as:


    var links = document.getElementsByTagName("a"), len = links.length;
    for (var n = 0; n < len; ++n) {
        links[n].onclick = window.alert.bind(null, "You are now going to: " + links[n].innerText);
    }

Function.prototype.bind() (which I use on window.alert()) is very similar to the partialApply() used in the article that you link.

Хоча цей приклад не є таким практичним, це недалеко від більш загальної задачі: Відображення вікна підтвердження, коли користувач натискає посилання, що веде на сторонній веб-сайт.

Тепер замість window.alert.bind (...) ми могли б використати анонімну функцію:


    links[n].onclick = (function(text) {
        return function() { window.alert(text); };
    })("You are now going to: " + link[n].innerText);

Однак це набагато більше коду! Більшість прикладів каррінга можна «спростити» таким чином, тому зазвичай це служить лише ярликом, хоча і дуже зручним.

3
додано
Дякуємо за детальний код, який вивчає дану техніку.
додано Автор conrad carter, джерело
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram