Контекст непривязанной функции в JavaScript

Давайте посмотрим, что будет, если в функции указать this, но не привязать ее ни к какому элементу, вот так:

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

func();

В этом случае результат зависит от того, строгий у нас режим или нет. Если режим нестрогий, то в this будет хранится ссылка на window:

javascriptfunction func() {
  console.log(this); // ссылка на окно window
}

func();

А если режим строгий, то в this будет хранится undefined:

javascript"use strict";

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

func();

Из сказанного выше может показаться, что в строгом режиме this всегда будет undefined. Как бы не так! Если просто вывести this вне функции, то в нем будет ссылка на window независимо от режима:

javascript"use strict";
console.log(this); // в this ссылка на window

Выводы

В любой функции можно написать this, это не приведет к каким-либо ошибкам JavaScript. Но вот что именно будет лежать в этом this не определено до момента вызова функции. Причем при разных вызовах функции this может принимать разное значение. Все зависит от контекста, в котором была вызвана функция.