Arrow

В обычных функциях/методах имеется свой this как ссылка на объект из которого вызвана функция/метод

  1. Функция
    
    var a = function a() {
      return this;
    };
    
    a() === window  // true            
            
  2. Метод
    
    var a = function a() {
      return this;
    };
    
    var foo = {
        bar: a
    };
    
    foo.bar() === foo // true
                
  3. Передача метода другому объекту
    
    var baz = {};
    baz.bar = foo.bar;
    
    baz.bar() === baz // true                    
                    

В стрелочных функциях this берется из лексического окружения.

  1. Функция
    
    var a = (() => this);
    
    a() === window // true            
            
  2. Метод
    
    var a = (() => this);
    
    var foo = {
        bar: a
    };
    
    foo.bar() === foo;      // false
    foo.bar() === window;   // true
    
    
                
  3. Передача метода другому объекту
     
    var baz = {};
    baz.bar = foo.bar;
    
    baz.bar() === baz;    // false                    
    baz.bar() === window; // true                    
                    
back