Эта статья предлагается к удалению. |
Функциональное программирование предоставляет много возможностей при работе с функциями. Хорошим примером могут служить функции высшего порядка.
Они имеют другие функции как аргументы или результат.
Например:
Функция-обёртка - это функция, которая добавляет аргументу функционал или функция, которая оборачивает другую функцию, то есть добавляет ему дополнительное поведение.
Подобное вполне реализуемо стандартными средствами JavaScript. Выглядит это как вызов некоей функции, которая оборачивает другую.
'use strict';
const wrap = (fn) => {
console.log('Wrap function: ' + fn.name);
return (...args) => {
console.log('Called wrapper for: ' + fn.name);
console.dir({ args });
const result = fn(...args);
console.log('Ended wrapper for: ' + fn.name);
console.dir({ result });
return result;
};
};
const func = (par1, par2) => {
console.dir({ method: { par1, par2 } });
return [par1, par2];
};
const cloned = wrap(func);
cloned('Uno', 'Due');
'use strict';
/*с помощью композиции примешываем
исполениние функции before до передаваемой
аргументы функции, а after после */
const wrap = (before, after, fn) => (
(...args) => after(fn(...before(...args)))
);
const func = (par1, par2) => {
console.dir({ method: { par1, par2 } });
return [par1, par2];
};
const before = (...args) => {
console.log('before');
return args;
};
const after = (...args) => {
console.log('after');
return args;
};
const cloned = wrap(before, after, func);
cloned('Uno', 'Due');
'use strict';
const timeout = (msec, fn) => {
let timer = setTimeout(() => {
if (timer) console.log('Function timedout');
timer = null;
}, msec);
return (...args) => {
if (timer) {
clearTimeout(timer);
timer = null;
return fn(...args);
}
};
};
const fn = (par) => {
console.log('Function called, par: ' + par);
};
const fn100 = timeout(100, fn);
const fn200 = timeout(200, fn);
setTimeout(() => {
fn100('first');
fn200('second');
}, 150);
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .