Maison > interface Web > js tutoriel > JavaScript montre la différence entre les variables globales et les variables globales implicites

JavaScript montre la différence entre les variables globales et les variables globales implicites

高洛峰
Libérer: 2017-02-11 15:50:48
original
1054 Les gens l'ont consulté

Cet article présente principalement la différence entre les variables globales d'affichage javascript et les variables globales implicites. Les amis dans le besoin peuvent s'y référer

En JavaScript, il existe deux façons de déclarer des variables globales

  • Utilisez var pour afficher les variables globales déclarées

  • Variables globales implicites déclarées sans var

La différence entre les deux Cela dépend s'il peut être supprimé via l'opérateur de suppression

Premier coup d'oeil à un morceau de code

var a = 'a'; // 显式声明的全局变量
b = 'b'; // 隐式声明的全局变量
 
console.log(a); // a
console.log(b); // b
console.log(window.a); // a
console.log(window.b); // b
Copier après la connexion

En js, les variables globales sont en fait attribut global object (window ), afin que les variables globales déclarées des deux manières puissent être obtenues via window

Essayez d'utiliser delete pour supprimer

// 显式声明的全局变量不能被删除
delete a; // 返回 false 
 
// 隐式声明的全局变量可以被删除
delete b; // 返回 true 
 
// 删除情况
console.log(typeof a); // string
console.log(typeof b); // undefined
Copier après la connexion

L'opérateur delete peut supprimer les attributs d'un objet, mais si l'attribut est un attribut non configurable, false sera renvoyé lors de la suppression (une exception sera levée en mode strict)

Cela signifie que les variables déclarées à l'aide de var ne sont pas configurables. Utilisez getOwnPropertyDescriptor pour obtenir l'objet décrivant les caractéristiques de la propriété afin de vérifier cela

Object.getOwnPropertyDescriptor(window, a); // {value: "a", writable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(window, b); // {value: "b", writable: true, enumerable: true, configurable: true}
Copier après la connexion

Les deux La différence fondamentale. est que les variables explicitement déclarées ne sont pas configurables et ne peuvent pas être supprimées via l'opérateur delete

Il est à noter qu'une fois que la valeur configurable est fausse, l'objet décrivant les caractéristiques de l'attribut ne peut pas être modifié, donc le descripteur d'attribut ne peut pas être modifié. Cela permet de supprimer les variables globales explicitement déclarées par delete, mais permet à l'inverse de ne pas supprimer les variables globales implicitement déclarées par delete

b = 'b';
var descriptor = Object.getOwnPropertyDescriptor(window, b);
descriptor.configurable = false;
Object.defineProperty(window, b, descriptor);
delete b; // 返回 false
Copier après la connexion

suite aux suppléments. d'autres internautes

Variables globales et variables globales implicites en JavaScript

Il existe quelques petites différences entre les variables globales implicites et les variables globales explicitement définies, qui consistent à utiliser l'opérateur de suppression pour rendre les variables indisponibles . Capacités définies.

1. Les variables globales créées via var (créées dans tout programme autre que les fonctions) ne peuvent pas être supprimées.
2. Les variables globales implicites créées sans var (qu'elles soient créées ou non dans une fonction) peuvent être supprimées.

Cela montre que, techniquement, les variables globales implicites ne sont pas vraiment des variables globales, mais ce sont des propriétés de l'objet global. Les attributs peuvent être supprimés via l'opérateur delete, mais les variables ne peuvent pas :

// 定义三个全局变量
var global_var = 1;
global_novar = 2; // 反面教材
(function () {
  global_fromfunc = 3; // 反面教材
}());
 
// 试图删除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true
 
// 测试该删除
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"
Copier après la connexion

Dans le navigateur, l'objet global peut être utilisé dans le code via la fenêtre attribut Accès depuis n'importe quel endroit (sauf si vous faites quelque chose de scandaleux, comme déclarer une variable locale nommée window). Mais dans d'autres contextes, cette propriété de commodité pourrait être appelée autrement (ou même ne pas être disponible dans le programme). Si vous devez accéder à l'objet global sans identifiant de fenêtre codé en dur, vous pouvez effectuer les opérations suivantes dans la portée de la fonction à n'importe quel niveau :

var global = (function () {
  return this;
}());
Copier après la connexion

Ceci La méthode peut obtenir l'objet global à tout moment, car elle est appelée en tant que fonction dans la fonction (non construite via new), et cela pointe toujours vers l'objet global. En fait, ce bug ne s'applique pas au mode strict d'ECMAScript 5, vous devez donc prendre une forme différente en mode strict. Par exemple, si vous développez une bibliothèque JavaScript, vous pouvez envelopper votre code dans une fonction immédiate, puis lui transmettre une référence depuis la portée globale en tant que paramètre de votre fonction immédiate.

Ce qui précède est la différence entre les variables globales d'affichage javascript et les variables globales implicites. La différence fondamentale entre les deux est que les variables explicitement déclarées ne sont pas configurables et ne peuvent pas être supprimées via l'opérateur de suppression

Plus javascript display Pour les articles connexes sur la différence entre les variables globales et les variables globales implicites, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal