AlexLearne Ответов: 1

Что делает bind () в этом примере?


Я пытаюсь обернуть свою голову вокруг частичных приложений в javascript, и я нашел этот пример.
У меня есть следующий код:
var aPlusb = function (a, b) {
    return a + b;
}

А если мы сделаем что-то подобное
var partial = aPlusb.bind(null, 10)
partial(6);//output : 16

Мой вопрос заключается в том, почему даже если мы изменим "null" в качестве аргумента, у нас все равно будет тот же результат?
var partial = aPlusb(false, 10);
partial(6);//output 16

И что на самом деле здесь делает Бинд?

Что я уже пробовал:

Я попытался посмотреть ссылку MDN bind (), и она объясняет этот метод, но мне это кажется слишком модным.
"Метод bind() создает новую функцию, которая при вызове имеет свое ключевое слово this, установленное в предоставленное значение, с заданной последовательностью аргументов, предшествующих любому предоставленному при вызове новой функции"
Что такое "это" в данном случае?

1 Ответов

Рейтинг:
6

Richard Deeming

Первый параметр к bind метод - это значение, которое будет возвращено при использовании this значение внутри возвращаемой функции. Так как ваша функция никогда не использует this- это в основном не имеет значения.

Рассмотрим простой пример:

var person = {
    name: "John Smith",
    age: 42,
    sayHello: function(){
        alert("Hello, " + this.name + ". You are " + this.age + " years old.");
    }
};

Если вы вызываете функцию непосредственно на объекте, она работает так, как ожидалось:
person.sayHello(); // Hello, John Smith. You are 42 years old.

Однако если вы попытаетесь передать эту функцию в качестве обратного вызова, она не сработает:
setTimeout(person.sayHello, 100); // Hello, . You are undefined years old.

Это происходит потому, что функция выполняется в глобальной области видимости. То this переменная указывает на window объект.

Пользуясь bind, вы можете убедиться, что функция вызывается в правильной области видимости:
setTimeout(person.sayHello.bind(person), 100);  // Hello, John Smith. You are 42 years old.