devterview_$ iniciar simulação

O valor de `this` em JavaScript

MédioPlenoFundamentos da linguagem

Pergunta

Como o valor de `this` é determinado em JavaScript, e por que arrow functions se comportam diferente?

Resposta esperada

`this` numa função normal é definido por COMO ela é chamada, não onde foi definida: chamada como método (`obj.f()`) → `this` é `obj`; chamada solta (`f()`) → `this` é `undefined` em strict mode (ou o global fora dele); com `call`/`apply`/`bind` → o `this` que você passar; com `new` → o objeto recém-criado. Isso causa o bug clássico de passar `this.metodo` como callback e perder o contexto. Arrow functions não têm `this` próprio: elas capturam o `this` do escopo léxico onde foram definidas, e por isso são usadas pra callbacks dentro de métodos sem precisar de `bind`.

Por que perguntam isso

Pergunta pleno. Sinal de domínio: enumerar as regras de chamada em ordem e citar o caso 'passei o método como callback e this virou undefined'.

#this#arrow-functions#contexto
publicidade

Perguntas de acompanhamento

Relacionadas