Контекст на несвързана функция в 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 може да приема различна стойност. Всичко зависи от контекста, в който функцията е била извикана.