Решил разобраться с функциями в JS, так как всегда путался с темой стрелочных функций.
Выяснил что функция созданная с помощью bind навсегда подвязывается к this и изменить его
невозможно.
Попытался забиндить this к стрелочной функции, и тоже самое, this у нее не меняется.
Получается что создание стрелочной функции аналогично созданию bind функции к которой подвязывает this в момент создания функции (а не в момент вызова)?
Т.е. стрелочные функции - некий синтаксический сахар для создания .bind(this) функции?
Вот пример:
function fn() {
"use strict";
console.log(this);
return ()=>{
"use strict";
console.log(this);
}
}
Если вызвать так:
testOb = {name: "test"};
arrowFn = fn.call(testOb);
// А затем
arrowFn();
Получится так, что arrowFn всегда впитывает this из функции fn. И запись аналогична следующей:
function fn2() {
"use strict";
console.log(this);
const newFn = function() {
"use strict";
console.log(this);
};
return newFn.bind(this);
}
И правдиво ли понимание того, что у обычных функций this определяет
в момент вызова, а не в момент создания, а у bind и стрелочных функций наоборот, this определяется
в момент создания, а не в момент вызова.
Я прав, или в чем-то ошибаюсь?