bind vs apply: есть ли разница между этими двумя? - PullRequest
0 голосов
/ 25 мая 2018

Рассмотрим следующую функцию:

function bind(fn, context) {
  return function() {
    return fn.apply(context, arguments);
  }
}

Эта функция делает то же самое, что и Function.prototype.bind?

Т.е., учитывая приведенное выше определение функции, должны следующие две строкиВ каком коде достигается одно и то же?

boundFunction = bind(someFunction, someContext);

// same same?

boundFunction = someFunction.bind(someContext);

Если есть какие-то тонкие или не очень тонкие различия, каковы они?

(я спрашиваю, потому что я видел функциюопределенные выше используются в некоторых JavaScript, и мне интересно, почему они просто не использовали Function.prototype.bind.)

1 Ответ

0 голосов
/ 25 мая 2018

Итак, основываясь на комментариях, это, кажется, ответ:

В моем примере две строки ...

boundFunction = bind(someFunction, someContext);
boundFunction = someFunction.bind(someContext);

... действительно достигают одного и того же результата.

Однако определенная таким образом функция «связать» не дает возможности связывать дальнейшие аргументы, как это делает Function.prototype.bind, то есть что-то вроде этого:

function abc(a, b, c) {
  console.log('a: '+a, 'b: '+b, 'c: '+c);
}

// This function predefines the first argument for abc:
var bc = abc.bind(undefined, 'Ay!');
abc('Yo!', 'hello', 'world');
// a: Yo! b: hello c: world
bc('hello', 'world');
// a: Ay! b: hello c: world
...