Объяснить функцию bindbind()

Может кто-нибудь объяснить эту функцию?

var bindbind = Function.prototype.bind.bind(Function.prototype.bind);

Я понимаю результат, который он дает:

var bindedContextFunc = bindbind(function)(context);
bindedContextFunc(args);

Но не понимаю процесс создания этой функции, я имею в виду часть bind(Function.prototype.bind)

1 ответ

Решение

ХОРОШО. У нас есть три раза Function.prototype.bind функция здесь, чей (упрощенный) код

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

Я сокращу в более функциональном стиле с большим частичным применением: связатьfn(context) -> fncontext.

Так что же это делает? У тебя есть bind.call(bind, bind) или связатьсвязать(связать). Давайте расширим это, чтобы связатьсвязать. Что если мы сейчас предоставим некоторые аргументы?

связатьсвязать(bind) (fn) (контекст)

bindbind(fn) (контекст)

связатьFN(контекст)

вконтексте

Мы здесь. Мы можем присвоить это некоторым переменным, чтобы сделать результат более ясным:

bindbind = связатьсвязать(связать)

bindfn = bindbindчто угодно(fn) // привязатьфн

contextbindfn = bindfnчто-нибудь(контекст) // вконтексте

результат = contextbindfnчто угодно(аргументы) // fncontext(args)

Другие вопросы по тегам