J'ai lu plusieurs fois le mode JavaScript strict, et certains disent "Désactiver avec les instructions". Dans le passé, j'ai vu tout cela en montant un cheval et en regardant des fleurs, et en passant, parce que j'utilise rarement cette déclaration dans les temps normaux, donc cela n'a pas grand-chose à voir avec moi-même. Aujourd'hui, je ne peux pas m'empêcher de me demander pourquoi le «modèle strict» ne peut pas tolérer la déclaration avec?
La spécification ECMAScript indique que "l'instruction avec avec l'instruction est utilisée pour définir la portée du code dans un objet spécifique". On peut voir que la déclaration avec la chaîne de portée.
Fonction Person (nom, âge, sexe) {this.name = name; this.age = Âge; this.sex = sexe;} (function () {var title = 'demandeur:'; var zhangsan = new personne ('zhang san', 20, 'mâle'); var str = ''; avec (zhangsan) {str = title + name + ', Âge' + Age + 'Years' ' position '+ travail;} console.log (str);}) ();Le code ci-dessus rapportera une référence non apprise: le travail n'est pas défini.
Si le bloc de déclaration ci-dessus est modifié en
str = title + zhangsan.name + ', âge' + zhangsan.age + 'années,' + zhangsan.sex + 'sexe' + ', position' + zhangsan.job;
Il n'y a pas d'erreur, la sortie est: le demandeur: Zhang San, 20 ans, masculin, une position non définie
Pour les variables dans le bloc d'instructions avec exécution, vous devez vérifier si leurs propriétés sont à Zhangsan.
Nous savons que lors de l'exécution d'un script, il y a deux processus nécessaires, compiler d'abord puis exécuter.
De toute évidence, lors de la compilation, il n'est pas possible de déterminer les propriétés que l'objet représenté par cette variable de Zhangsan a. Il ne peut être déterminé que Zhangsan est une instance de personne lorsqu'il est exécuté. Par conséquent, il ne peut pas être vrai que la variable dans le bloc d'instructions avec une propriété de Zhangsan ou une variable dans la chaîne de portée variable précédente pendant la compilation.
Cela entre en conflit avec le fait que la variable est définie lors de la compilation du mode strict, de sorte que le mode strict ne permet pas que la différence existe. Par conséquent, il n'est pas difficile de comprendre que l'instruction avec la déclaration est désactivée en mode strict.