Sidottomattoman funktion konteksti JavaScriptissä
Katsotaan, mitä tapahtuu, jos funktiossa
määritetään this, mutta sitä ei sidota
mihinkään elementtiin, näin:
function func() {
console.log(this);
}
func();
Tässä tapauksessa tulos riippuu siitä,
onko käytössämme
tiukka tila
vai ei. Jos tila ei ole tiukka,
this sisältää viittauksen
window-objektiin:
function func() {
console.log(this); // viittaus ikkunaan window
}
func();
Jos tila on tiukka, niin this sisältää
arvon undefined:
"use strict";
function func() {
console.log(this); // undefined
}
func();
Yllä olevasta voi vaikuttaa, että
tiukassa tilassa this on aina
undefined. Ei niin! Jos yksinkertaisesti
tulostaa this funktion ulkopuolella, niin se
sisältää viittauksen window-objektiin riippumatta
tilasta:
"use strict";
console.log(this); // this sisältää viittauksen windowiin
Yhteenveto
Missä tahansa funktiossa voi kirjoittaa this,
se ei johda JavaScriptin virheisiin.
Mutta mitä tarkalleen this sisältää
ei ole määritelty ennen kuin funktiota kutsutaan.
Lisäksi eri funktiokutsuissa this
voi saada eri arvon. Kaikki riippuu
kontekstista, jossa funktio kutsuttiin.