Το Context μιας μη δεσμευμένης συνάρτησης στο JavaScript
Ας δούμε τι συμβαίνει αν σε μια συνάρτηση
χρησιμοποιήσουμε το this, αλλά δεν τη δεσμεύσουμε
σε οποιοδήποτε στοιχείο, έτσι:
function func() {
console.log(this);
}
func();
Σε αυτήν την περίπτωση, το αποτέλεσμα εξαρτάται από το αν
η αυστηρή λειτουργία
είναι ενεργοποιημένη ή όχι. Εάν η λειτουργία δεν είναι αυστηρή,
τότε στο this θα υπάρχει μια αναφορά στο
window:
function func() {
console.log(this); // αναφορά στο παράθυρο window
}
func();
Αν όμως η λειτουργία είναι αυστηρή, τότε στο this θα
υπάρχει undefined:
"use strict";
function func() {
console.log(this); // undefined
}
func();
Από τα παραπάνω, μπορεί να φαίνεται ότι
στη λειτουργία αυστηρού τύπου το this θα είναι
πάντα undefined. Όμως, δεν είναι έτσι! Αν απλά
εκτυπώσουμε το this έξω από μια συνάρτηση, τότε σε αυτό
θα υπάρχει αναφορά στο window ανεξάρτητα
από τη λειτουργία:
"use strict";
console.log(this); // στο this αναφορά στο window
Συμπεράσματα
Σε οποιαδήποτε συνάρτηση μπορούμε να γράψουμε this,
αυτό δεν θα οδηγήσει σε σφάλματα JavaScript.
Αλλά το τι ακριβώς θα περιέχει αυτό το this
δεν ορίζεται μέχρι τη στιγμή της κλήσης της συνάρτησης.
Επιπλέον, σε διαφορετικές κλήσεις της συνάρτησης το this
μπορεί να πάρει διαφορετική τιμή. Όλα εξαρτώνται
από το context στο οποίο κλήθηκε η συνάρτηση.