Все это затеяно чтобы сократить строку
slice.call(arguments);
основное:
тут происходит вызов функции call, в которой в качестве this будет slice.
Соответственно чтобы привязать slice (который будет в this) к call, можно сделать
const boundCall = slice.call.bind(slice);
// теперь можно так:
boundCall(arguments) //то же самое что slice.call(arguments)
дальше уже несущественные вещи в которых вы запутались, slice.call - это Function.prototype.call, можно заменить одно на другое (но не обязательно):
const boundCall = Function.prototype.call.bind(slice);
// теперь можно так:
boundCall(arguments) //то же самое что slice.call(arguments)
Ну и что такое slice - это Array.prototype.slice, получаем:
const slice = Array.prototype.slice
const boundCall = Function.prototype.call.bind(slice);
// теперь можно так:
boundCall(arguments) //то же самое что slice.call(arguments)
теперь переименуем переменные чтоб было как в mdn - slice в unboundSlice, boundCall в slice, получим
const unboundSlice = Array.prototype.slice
const slice = Function.prototype.call.bind(slice);
// теперь можно так:
slice(arguments) //то же самое что slice.call(arguments)
Но все это просто переименование и замена одних букв на другие, что совершенно не меняет логику того происходит, то есть несмотря на громоздкие конструкции, там просто привязывание slice к call в качестве this.
var slice = Array.prototype.slice;
const shortSlice = slice.call.bind(slice);
shortSlice(arguments)// то же самое что и slice.call(arguments)
То что slice в свою очередь тоже функция, как видим, совершенно нигде не проявляется и не имеет значения. тут везде она выступает как объект переданный в this. Остальное - детали реализации call, и это ее дело что она будет с этим объектом делать.