Contexto de función no vinculada en JavaScript

Veamos qué sucede si en una función indicamos this, pero no la vinculamos a ningún elemento, así:

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

func();

En este caso, el resultado depende de si estamos en modo estricto o no. Si el modo no es estricto, entonces this contendrá una referencia a window:

javascriptfunction func() {
  console.log(this); // referencia a la ventana window
}

func();

Y si el modo es estricto, entonces this contendrá undefined:

javascript"use strict";

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

func();

De lo dicho anteriormente, podría parecer que en modo estricto this siempre será undefined. ¡Pero no es así! Si simplemente mostramos this fuera de una función, entonces contendrá una referencia a window independientemente del modo:

javascript"use strict";
console.log(this); // en this referencia a window

Conclusiones

En cualquier función se puede escribir this, esto no conducirá a ningún error de JavaScript. Pero qué exactamente habrá en este this no está definido hasta el momento de llamar a la función. Además, en diferentes llamadas a la función, this puede tomar diferentes valores. Todo depende del contexto en el que se llamó a la función.