Contexte d'une fonction non liée en JavaScript

Voyons ce qui se passe si dans une fonction nous indiquons this, mais sans la lier à aucun élément, comme ceci :

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

func();

Dans ce cas, le résultat dépend du fait que nous soyons en mode strict ou non. Si le mode n'est pas strict, alors this contiendra une référence à window :

javascriptfunction func() {
  console.log(this); // référence à la fenêtre window
}

func();

Et si le mode est strict, alors this contiendra undefined :

javascript"use strict";

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

func();

De ce qui précède, on pourrait penser que en mode strict, this sera toujours undefined. Pas du tout ! Si nous affichons simplement this en dehors de toute fonction, alors il contiendra une référence à window, indépendamment du mode :

javascript"use strict";
console.log(this); // dans this une référence à window

Conclusions

Dans n'importe quelle fonction, on peut écrire this, cela ne provoquera pas d'erreur JavaScript. Mais ce qui sera stocké dans ce this n'est pas défini jusqu'au moment de l'appel de la fonction. De plus, lors de différents appels de la fonction, this peut prendre différentes valeurs. Tout dépend du contexte dans lequel la fonction a été appelée.