Всем привет
В процессе решения
задачи по JS и пары часов проведенных в поисках решения, я его всё таки нашел (
ссылка) и , которая мне помогла :)
Это задачка связанная с частичным применением (partial application)
В голове бардак, но в принципе я понимаю что я делаю, а вот потом объяснить может быть проблематично)
/*Функция суммирует любое количество аргументов, переданных ей*/
function add(a, b) {
var r = 0;
for(var i in arguments){
r += arguments[i];
}
return r;
}
/*Вот здесь у меня возникли не понимания. */
function partial(arg) { /*(1)*/
var param = Array.prototype.slice.call(arguments, 1); /*(2)*/
return function(){ /*(3)*/
return arg.apply(this, param.concat(Array.prototype.slice.call(arguments, 0))); /*(4)*/
}
}
var p = partial(add, 2,5); /*(5)*/
console.log(p(1,3,1)); /*(6)*/
Правильно ли я понимаю свои действия ?)
- Функция принимает любое количество аргументов, это ясно.
- param - это массив аргументов функции. В него всходят все аргументы после первого? То есть первый не учитывается?
- Возвращается анонимная функция, это тоже ясно.
- Возвращает массив аргументов, созданный из массивов переданных в параметры. А дальше по аналогии с пунктом 2. Я все правильно понял? Если нет то объясните :)
- Здесь все просто: в аргументы передается функция для которой фиксируются первые 2(в данном случае) аргументы 2 и 5
- Передается любое количество аргументов, которые будут суммироваться с уже переданными ранее(то есть 2 и 5)
Если в чем то ошибся, поправьте меня)