Junior
Τι θα εμφανιστεί στην κονσόλα αν χρησιμοποιήσετε this στο console.log;
sobes.tech AI
Απάντηση από AI
Εξαρτάται από το πλαίσιο κλήσης του console.log και τη λειτουργία αυστηρού JavaScript ("use strict").
Στο παγκόσμιο πλαίσιο (εκτός συναρτήσεων και modules):
- Σε μη αυστηρή λειτουργία (
"use strict"απουσιάζει ή δηλώνεται σε μια συνάρτηση): τοthisαναφέρεται στο παγκόσμιο αντικείμενο (windowστον browser,globalστο Node.js). - Σε αυστηρή λειτουργία: το
thisθα είναιundefined.
Μέσα σε μια συνάρτηση:
- Σε μη αυστηρή λειτουργία: το
thisαναφέρεται στο παγκόσμιο αντικείμενο αν η συνάρτηση καλείται ως κανονική συνάρτηση (myFunction()). Αν η συνάρτηση καλείται ως μέθοδος ενός αντικειμένου (myObject.myMethod()), τοthisαναφέρεται στο αντικείμενο (myObject). Αν η συνάρτηση χρησιμοποιείται ως κατασκευαστής (new MyClass()), τοthisαναφέρεται στη νέα παρουσία του αντικειμένου. - Σε αυστηρή λειτουργία: το
thisθα είναιundefinedαν η συνάρτηση καλείται ως κανονική συνάρτηση. Σε άλλες περιπτώσεις (μέθοδος αντικειμένου, κατασκευαστής), η συμπεριφορά είναι ίδια με τη μη αυστηρή λειτουργία.
Μέσα σε μια βέλτιστη συνάρτηση (=>):
- Το
thisκληρονομείται λεξικά από το περιβάλλον. Αυτό σημαίνει ότι η τιμή τουthisμέσα σε μια βέλτιστη συνάρτηση θα είναι η ίδια με αυτή της εξωτερικής κανονικής συνάρτησης ή του παγκόσμιου πλαισίου όπου δηλώθηκε, ανεξάρτητα από το πώς καλείται. Οι βέλτιστες συναρτήσεις δεν δεσμεύουν τοthisμε το δικό τους πλαίσιο κλήσης.
Παράδειγμα:
// Παγκόσμιο πλαίσιο
console.log(this); // Στον browser: Window, στο Node.js: global (μη αυστηρή λειτουργία)
// Στον browser: undefined, στο Node.js: undefined (αυστηρή λειτουργία)
// Κανονική συνάρτηση
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Στον browser: Window, στο Node.js: global
function showThisStrict() {
"use strict";
console.log(this);
}
showThisStrict(); // undefined
const myObject = {
methodNonStrict: function() {
console.log(this);
},
methodStrict: function() {
"use strict";
console.log(this);
}
};
myObject.methodNonStrict(); // myObject
myObject.methodStrict(); // myObject
// Βέλτιστη συνάρτηση
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Στον browser: Window, στο Node.js: global (κληρονομεί από το περιβάλλον)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Στον browser: Window, στο Node.js: global (κληρονομεί από το περιβάλλον)