Что он делает, и в чем его отличие от call и apply???
Bind создает обертку над функцией которая в свою очередь подменяет контекст этой функции, помимо этого bind умеет подменять аргументы, осуществляя карирование. А насчет отличия, он вызывает не функцию в отличии от call и apply а возвращает обертку.
function check() {
alert(this);
}
var wrapped = check().bind('abc');
check(); // [object Window]
wrapped(); // abc
function add(a, b) {
return a b;
}
var addTwo = add.bind(null, 2);
alert(add(3, 2)); // 5
alert(addTwo(2)); // 4