Contexto de função não vinculada em JavaScript

Vamos ver o que acontece se em uma função usarmos this, mas não a vincularmos a nenhum elemento, assim:

javascriptfunction func() {
  console.log(this);
}

func();

Neste caso, o resultado depende se estamos no modo estrito ou não. Se o modo não for estrito, então this conterá uma referência ao window:

javascriptfunction func() {
  console.log(this); // referência ao objeto window
}

func();

E se o modo for estrito, então this conterá undefined:

javascript"use strict";

function func() {
  console.log(this); // undefined
}

func();

Pelo exposto acima, pode parecer que no modo estrito this será sempre undefined. Mas não é bem assim! Se simplesmente exibirmos this fora de uma função, então ele será uma referência ao window independentemente do modo:

javascript"use strict";
console.log(this); // em this há uma referência a window

Conclusões

Em qualquer função, podemos escrever this, isso não levará a quaisquer erros de JavaScript. Mas o que exatamente estará dentro deste this não é definido até o momento da chamada da função. Além disso, em diferentes chamadas da função, this pode assumir valores diferentes. Tudo depende do contexto no qual a função foi chamada.