1
resposta

this com function e arrow function

Usando function o

console.log(this);

mostra 3 funções, porém usando arrow function mostra apenas a function lista.

Porque isso ocorre? Segue:

Usando function

module.exports = function() {
  return function(connection) {
    this.lista = function(callback) {
      connection.query('select * from livros', callback);
    };
    console.log(this);
    return this;
  };
};

log

{ dbConnectionFactory: [Function: createDbConnection],
  produtosBanco: [Function],
  lista: [Function] }

Usando arrow function:

module.exports = () => {
  return connection => {
    this.lista = callback => {
      connection.query('select * from livros', callback);
    };
    console.log(this);
    return this;
  };
};

log

{ lista: [Function] }
1 resposta

Por que as arrows functions tem valor léxico, elas capturam o valor de this do contexto vinculado. Dá uma lida na documentação para saber mais sobre o assunto https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/Arrow_functions