Когда использовать карринг и частичные функции в JavaScript - PullRequest
4 голосов
/ 28 октября 2011

Я прочитал этот пост о докторе Доббе о каррировании и частичных функциях в JavaScript. Это выглядит полезным, но мне интересно (как случайный разработчик в JavaScript), существуют ли стандартные ситуации, когда это регулярно используется?

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

Для начала я лично не рекомендовал бы карри в 99% случаев.Это может легко сделать код нечитаемым при неправильном использовании.

Однако некоторые приложения, которые я мог бы назвать, были бы связаны с настройкой контекста функции.Например, когда вы впервые выполняете функцию каррирования с контекстом (что-то отличное от объекта окна и т. Д.), У вас может быть функция, которая применяет определенные вычисления к свойствам исходного объекта и т. Д. При вызове позже.

Вторая ситуация будеткогда, например, у вас есть функция, которая принимает три аргумента.Элемент DOM, имя атрибута и его значение.Это можно превратить в функцию каррирования, которую вы можете инициировать с помощью соответствующего элемента, тогда каждое последующее выполнение будет устанавливать атрибут на желаемое значение.Может быть полезно в тех случаях, когда у вас есть множество условий, от которых зависят атрибуты.

3 голосов
/ 28 октября 2011

Очень распространенный сценарий - при создании обработчиков событий.

Например, скажем, у вас есть документ с большим количеством ссылок, таких как:

<code>    <a href="http://someurl.com/example">link</a>

Скажем, вы хотите, чтобы javascript прошел через все эти ссылки и отображал диалоговое окно "Вы сейчас: " при нажатии. В этом случае вы можете использовать такой код:


    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() (который я использую в window.alert ()) очень похож на partialApply(), используемый в статье, на которую вы ссылаетесь.

Хотя этот пример сам по себе не очень практичен, он не так далек от более распространенной задачи: отображение окна подтверждения, когда пользователь нажимает ссылку, ведущую на сторонний веб-сайт.

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


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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...