Что делает bind в JavaScript?

Что он делает, и в чем его отличие от 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