В приведенном ниже фрагменте привязки:
function foo(something) {
this.a = something;
}
var obj1 = {};
var bar = foo.bind( obj1 );
bar( 2 );
console.info( obj1.a ); // 2
var baz = new bar( 5 );
console.info( obj1.a ); // 2
console.info( baz.a ); // 5
На этом этапе var bar = foo.bind( obj1 ); мы связываем пустой obj1 с функцией foo.
После выполнения bar(2) значение obj1 2.
Хотите знать, что вызвало срабатывание bar(2)?
Мое предположение:
Поскольку bar назначен foo и связан с obj1, вызов bar(2) мог назначить this.a = 2 и сохранить это значение в obj1 (то есть obj1 = {a: 2}).
Верно ли мое предположение?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваше предположение верно.
var bar = foo.bind( obj1 );
делает bar ссылку на объект foo. Таким образом, теперь вы можете получить доступ к функции через панель.
bar( 12 );
выводит 12, если вы вызываете console.info(), и так далее.
Здесь bind(obj1) работает так, как будто вы заменяете scope по умолчанию для foofunction на obj1, поэтому ключевое слово this заменяется пустым объектом (obj1) внутри foo.
function foo(something) {
//this = {} (obj1);
//this.a == obj.a
this.a = something;
}
var obj1 = {};
var bar = foo.bind(obj1);
Вызов bind() для функции возвращает новую связанную функцию. Когда вы вызываете эту связанную функцию, она выполняет исходную функцию с контекстом, который вы передали в качестве первого аргумента. Следовательно, this внутри foo указывает на obj1, когда вы вызываете его через связанную функцию.
Чтобы понять это, вам нужно сначала взять то, что делает .bind?
bind - это функция, которая возвращает другую функцию, которая называется связанной.
function x (){
console.info(this.item)
}
рассмотрите приведенный выше код, не имеет никакого представления о том, что такое item.
var obj = { item : 10};
рассмотрите этот объект, этот объект знает о свойстве элемента.
Когда вы вызываете .bind для объекта x (функции), он возвращает ту же копию функции (называемую граница), но с контекстом obj {item: 10}.
var bound = x.bind(obj);
В этом конкретном заявлении говорится, что задайте эту конкретную функцию в контексте obj.
Теперь, если мы вызовем bound(), он напечатает 10