Αυτό είναι ένα πολύ σκηνοθετημένη παράδειγμα, αλλά ας υποθέσουμε ότι έχουμε δημιουργήσει μια μεταβλητή _thisκάπου σε μια συνάρτηση τάξη.
class Person {
constructor (public name : string) {}
changeName(name) {
var _this = {};
(() => {
this.name = name;
})();
}
}
Αυτό δεν θα λειτουργήσει όπως αναμένεται, όταν καλούμε τη changeNameσυνάρτηση, διότι το σχετικό τμήμα του μεταγλωττισμένο κώδικα μοιάζει με αυτό:
var _this = this;
var _this = {};
(function () {
_this.name = name;
})();
Αυτό είναι κακό Javascript: έχουμε δύο varδηλώσεις αντικατάσταση ο ένας τον άλλον. Ο _thisδημιουργήθηκε από τον compiler είναι να αντικατασταθούν από μου _this.
Σε ό, τι μπορώ να δω, αυτή η συμπεριφορά δεν καθορίζεται στο spec γραφομηχανή.
Γιατί θα πρέπει να έρχονται σε σύγκρουση; Δεν είναι δυνατή η compiler να ανιχνεύσει αν έχω δημιουργήσει μια μεταβλητή με το όνομα _thisκαι το όνομα του δημιουργείται αυτόματα ένα κάτι άλλο, ήθελε _this2να κρατήσει μεταβλητών μου και αυτά που compiler που δημιουργείται από την καταπάτηση κάθε άλλο;













