Qu'est-ce qui est si grave pour les variables globales?

Duplication possible:
Pourquoi est-il mauvais de créer des variables globales d'éléments en Javascript?

Dans la Bible de JavaScript, on dit que les variables globales (les variables déclarées sans le mot-clé "var") sont très mauvaises. Ok, en comparaison avec des langages fortement typés comme Java ou C ++ JavaScript est comme un slang de gang de rue (était!).

Mais y a-t-il des problèmes de performance? Ou est-ce que le navigateur est en panne? Ou existe-t-il une différence sensible réelle lors de l'utilisation de globals?

J'ai appris JavaScript à mon propre compte et je respecte les lignes directrices des livres et des experts, mais il sera bon de savoir pourquoi c'est un sujet aussi important.

Si l'on adopte une bonne approche structurée, les variables globales sont parfaitement acceptables à utiliser, et en fait, économiser un peu de frais généraux avec tout le passage / la copie de différents pointeurs / variables.

Pour moi, l'utilisation de vars locaux est plus une question de la facilité avec laquelle le code permet de maintenir, de déboguer et d'accéder à d'autres systèmes.

Les variables globales peuvent avoir des effets secondaires non intentionnels (action à distance).

Par exemple, lorsque vous avez l'intention d'utiliser une variable locale i et d'oublier la var et un autre code (qui a couru avant) ont fait la même chose, alors vous commencez votre utilisation avec cette ancienne variable de variables. Cela peut jeter votre code sauvagement sur sa piste et peut être difficile à repérer ("Comment cette valeur s'est-elle retrouvée ici?").

Il y a quelques jours, il y avait une question sur un problème similaire (en Java, cependant) et cela a provoqué beaucoup de confusion.

En dehors de cela, il augmente la portée de votre variable, ce qui signifie que sa mémoire ne peut pas être récupérée même si vous n'avez plus besoin d'y accéder, ce qui entraînera des fuites de mémoire.

Je dirais qu'il y a deux questions principales ici:

  • Levage
  • Redéfinition des variables externes

La question du levage survient principalement lorsque vous essayez de définir la même variable à l'intérieur de ce que vous pourriez croire des étendues différentes, mais ne sont vraiment pas (par exemple, à l'intérieur et à l'extérieur des accolades d'une déclaration if).

JavaScript supprime toutes les définitions de variables et affecte la valeur partout où la variable a été déclarée et attribuée à l'origine. Cela pourrait se retrouver dans certains bugs étranges où vous, sans remarquer, pourrait redéfinir vos propres variables globales (effrayant …)

L'autre problème est que, si vous utilisez des bibliothèques externes dans votre projet, vous pouvez facilement remplacer une variable déjà définie et, en conséquence, perdre certaines des fonctionnalités offertes (ce que vous ne voulez probablement pas faire) et présenter des subtiles Bugs (à nouveau).

Je recommanderais d'embrasser les variables locales autant que possible, ou vous pouvez utiliser des "espaces de noms" pour les séparer.

Le pire est que pour les deux problèmes, JavaScript restera silencieux, de sorte qu'ils deviennent difficiles à trouver des bugs.