представлять
Эта статья в основном представляет некоторые методы, используемые в функции (часть 1). Используя функции функций, вы можете написать много очень интересного кода. Эта статья в основном включает в себя: режим обратного вызова, объект конфигурации, функцию возврата, программу распределения и карри.
Функция обратного вызова
В JavaScript, когда функция A является одним из параметров другой функции B, функция A называется функцией обратного вызова, то есть A может выполняться в течение периода функции B (оба начала, промежуточный и конец).
Например, существует функция, которая генерирует узлы
Кода -копия выглядит следующим образом:
var ComplexCompatation = function () { /* Grade внутренне и верните узел* /};
Существует объявление функции FindNodes для поиска всех узлов, а затем выполнения кода через обратный вызов.
Кода -копия выглядит следующим образом:
var findnodes = function (обратный вызов) {
var nodes = [];
var node = complexCompatation ();
// Если функция обратного вызова доступна, выполните ее
if (typeOf обратный вызов === "function") {
обратный вызов (узел);
}
nodes.push (узел);
возвращаемые узлы;
};
Что касается определения обратного вызова, мы можем заранее определить его для использования:
Кода -копия выглядит следующим образом:
// определить обратный вызов
var hide = function (node) {
node.style.display = "none";
};
// Найти узлы и скрыть все узлы
var hiddennodes = findnodes (скрыть);
Вы также можете использовать анонимные определения непосредственно при вызове, следующим образом:
Кода -копия выглядит следующим образом:
// Использовать анонимные функции для определения обратного вызова
var blocknodes = findnodes (function (node) {
node.style.display = 'block';
});
Наиболее часто используемые, вероятно, являются призывы к методу jQuery Ajax. Определяя обратный вызов на DED/FAILD, мы можем дополнительно обрабатывать, когда вызов AJAX преуспевает или сбой. Код заключается в следующем (этот код основан на jQuery версии 1.8):
Кода -копия выглядит следующим образом:
var menuid = $ ("ul.nav"). First (). attr ("id");
var request = $ .ajax ({
URL: "script.php",
Тип: "post",
ДАННЫЕ: {ID: MENUID},
Datatype: "html"
});
// Обработка обратного вызова, когда вызов успешно
request.done (function (msg) {
$ ("#log"). html (msg);
});
// Обработка обратного вызова, когда вызов сбой
request.fail (function (jqxhr, textstatus) {
ALERT ("Запрос не удастся:" + textStatus);
});
Объекты конфигурации
Если параметр функции (или метода) имеет только один параметр, а параметр является буквальным объектом, мы называем этот шаблон шаблоном объекта конфигурации. Например, следующий код:
Кода -копия выглядит следующим образом:
var conf = {
Имя пользователя: «Шичуань»,
первым: "Чуан",
Последнее: "ши"
};
Addperson (Conf);
В AddPerson вы можете использовать значение CONF по желанию, которое обычно используется для работы по инициализации. Например, AjaxSetup в jQuery реализуется таким образом:
Кода -копия выглядит следующим образом:
// Установите начальное значение заранее
$ .ajaxSetup ({
URL: "/xmlhttp/",
Global: ложь,
Тип: "post"
});
// затем позвоните еще раз
$ .ajax ({data: mydata});
Кроме того, многие плагины jQuery также имеют эту форму передачи параметров, но они также не могут быть переданы. Когда они не проходят, значение по умолчанию будет использоваться.
Вернуть функцию
Возвращение функции относится к новой функции, которая гибко создается на основе конкретных условий, когда возвращаемое значение одной функции является другой функцией, или новая функция гибко создается в соответствии с конкретными условиями. Пример кода заключается в следующем:
Кода -копия выглядит следующим образом:
var setup = function () {
console.log (1);
return function () {
Console.log (2);
};
};
// Вызовите функцию настройки
var my = setup (); // Вывод 1
мой(); // Вывод 2
// или вы также можете назвать это напрямую
настраивать()()();
Или вы можете использовать функцию закрытия, чтобы записать частный номер счетчика в функции настройки и увеличить счетчик по каждому вызову. Код заключается в следующем:
Кода -копия выглядит следующим образом:
var setup = function () {
var count = 0;
return function () {
return ++ count;
};
};
// Использование
var Next = setup ();
следующий(); // возврат 1
следующий(); // возврат 2
следующий(); // возврат 3
Применимый
Частичное применение здесь фактически предназначено для разделения входящих параметров. Иногда ряд операций может иметь один или несколько параметров всегда одинаково. Затем мы можем сначала определить частичную функцию, а затем выполнить эту функцию (оставшиеся различные параметры передаются во время выполнения).
Например, код заключается в следующем:
Кода -копия выглядит следующим образом:
var partialany = (function (aps) {
// Эта функция является результатом вашего собственного выполнения выражения функции и присваивается переменной Partialany
Функция func (fn) {
var argsorig = aps.call (аргументы, 1);
return function () {
var args = [],
argspartial = aps.call (аргументы),
i = 0;
// все исходные наборы параметров переменных,
// Если параметр является Partialany._ Заполнитель, используйте значение, соответствующее параметру следующей функции
// В противном случае используйте значение в исходном параметре
for (; i <argsorig.length; i ++) {
args [i] = argsorig [i] === func._
? argspartial.shift ()
: argsorig [i];
}
// Если есть дополнительные параметры, добавьте к концу
вернуть fn.apply (this, args.concat (argspartial));
};
}
// для настройки заполнителей
func._ = {};
вернуть фанк;
}) (Array.prototype.slice);
Как использовать его следующим образом:
Кода -копия выглядит следующим образом:
// определить функции обработки
функция hex (r, g, b) {
вернуть '#' + r + g + b;
}
// Определите частичную функцию, возьмите первый параметр r of hex в качестве значения неизменного параметра ff
var redmax = partialany (hex, 'ff', partialany._, partialany._);
// Метод вызова новой функции RedMax заключается в следующем, и необходимы только 2 параметра:
console.log (redmax ('11 ',' 22 ')); // "#ff1122"
Если вы думаете, что Partialany._ слишком длинная, вы можете использовать __ вместо этого.
Кода -копия выглядит следующим образом:
var __ = partialany._;
var greenmax = partialany (hex, __, 'ff');
console.log (greenmax ('33 ',' 44 '));
var bluemax = partialany (hex, __, __, 'ff');
console.log (bluemax ('55 ',' 66 '));
var MagentAmax = partialany (hex, 'ff', __, 'ff');
console.log (magentamax ('77 '));
Таким образом, это будет намного проще.
Каррики
Керризинг является функцией функционального программирования, преобразование обработки нескольких параметров в обработку отдельных параметров, аналогично цепным вызовам.
Давайте приведем простой пример функции добавления:
Кода -копия выглядит следующим образом:
функция добавить (x, y) {
var oldx = x, oldy = y;
if (typeof oldy === "undefined") {// частично
вернуть функцию (newy) {
вернуть Oldx + Newy;
}
}
вернуть x + y;
}
Таким образом, есть много способов позвонить, например:
Кода -копия выглядит следующим образом:
// тест
TypeOf add (5); // "функция"
добавить (3) (4); // 7
// это также возможно
var add2000 = add (2000);
add2000 (10); // 2010
Далее, давайте определим более общую функцию каррики:
Кода -копия выглядит следующим образом:
// Первый параметр - это функция, которая должна быть применена, а второй параметр - минимальное количество параметров, которые должны быть переданы в
Функция Curry (func, minargs) {
if (minargs == не определен) {
minargs = 1;
}
Функция funcwithargsfrozen (frozenargs) {
return function () {
// Обработка оптимизации, если при вызове нет параметров, верните саму функцию
var args = array.prototype.slice.call (аргументы);
var newargs = frozenargs.concat (args);
if (newargs.length> = minargs) {
return func.apply (это, newargs);
} еще {
вернуть funcwithargsfrozen (newargs);
}
};
}
вернуть funcwithargsfrozen ([]);
}
Таким образом, мы можем определить наше деловое поведение по желанию, например, определение сложения:
Кода -копия выглядит следующим образом:
var plus = curry (function () {
var result = 0;
for (var i = 0; i <arguments.length; ++ i) {
Результат += аргументы [i];
}
результат возврата;
}, 2);
Как его использовать реально и разнообразно.
Кода -копия выглядит следующим образом:
плюс (3, 2) // нормальный вызов
Плюс (3) // Применить, вернуть функцию (возвращаемое значение - значение параметра 3+)
Плюс (3) (2) // Полное приложение (вернуться к 5)
plus () (3) () () (2) // return 5
плюс (3, 2, 4, 5) // может получать несколько параметров
плюс (3) (2, 3, 5) // Аналогично
Ниже приведен пример вычитания
Кода -копия выглядит следующим образом:
var minus = curry (function (x) {
var result = x;
for (var i = 1; i <arguments.length; ++ i) {
Результат -= аргументы [i];
}
результат возврата;
}, 2);
Или если вы хотите поменять порядок параметров, вы можете определить его так
Кода -копия выглядит следующим образом:
var flip = curry (function (func) {
вернуть карри (функция (a, b) {
вернуть фанк (b, a);
}, 2);
});
Суммировать
Функции в JavaScript имеют много специальных функций и могут использовать характеристики параметров закрытия и аргументов для реализации многих различных методов. В следующей статье мы продолжим представлять методы использования функции для инициализации.