Swartex
@Swartex
Многорукий могоног

Правильно ли я понимаю работу данного кода?

Всем привет
В процессе решения задачи по 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)*/


Правильно ли я понимаю свои действия ?)
  1. Функция принимает любое количество аргументов, это ясно.
  2. param - это массив аргументов функции. В него всходят все аргументы после первого? То есть первый не учитывается?
  3. Возвращается анонимная функция, это тоже ясно.
  4. Возвращает массив аргументов, созданный из массивов переданных в параметры. А дальше по аналогии с пунктом 2. Я все правильно понял? Если нет то объясните :)
  5. Здесь все просто: в аргументы передается функция для которой фиксируются первые 2(в данном случае) аргументы 2 и 5
  6. Передается любое количество аргументов, которые будут суммироваться с уже переданными ранее(то есть 2 и 5)


Если в чем то ошибся, поправьте меня)
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
abyrkov
@abyrkov
JavaScripter
Все правильно, аналог .bind
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы