@Mr-Governor
Губернирую

Являются ли стрелочные функции аналогом bind функций?

Решил разобраться с функциями в 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 определяется в момент создания, а не в момент вызова.

Я прав, или в чем-то ошибаюсь?
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 2
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
ronnie85
@ronnie85
Fullstack Dev
Все в контексте. Привязывая функцию к объекту, this будет объект. У стрелочной функции this всегда будет parent - родитель, если он есть.
Это очень удобно.
const obj = {
   count: 0,
   start() {
      this.intId = setInterval(() => {
     	   if (this.count < 5) {
            this.count++;
            console.log('count', this.count);
     	   } else {
     	   	clearInterval(this.intId);
     	   }
      }, 1000);
   }
};
obj.start();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы