Спасибо, но можно пару вопросов?
var args = Array.prototype.slice.call(arguments, 1);
Вот это строкой мы делаем массив из аргументов, кроме 1ого.
return function() {
return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
}
А вот эта строчка чуть-чуть запутала. Мы возвращаем функцию, которая возвращает результат функции bar, вызывая ее в контексте чего? При этом передаем функции bar это: мы к массиву args добавляем весь массив аргументов arguments. Можно подробно рассказать этот момент, я запутался. Пожалуйста.