web-dev-qa-db-fra.com

Un exemple d'observation des variables en javascript

J'ai découvert le terme d'observation des variables dans Eloquent Javascript (Chapter 3) , mais j'essaie de comprendre un exemple de base précis du concept.

Est-ce un exemple d'observation?

var currencySymbol = "$";

function showMoney(amount) {
  var currencySymbol = "€";
  document.write(currencySymbol + amount);
}

showMoney("100");​
32

C'est aussi ce qu'on appelle portée variable.

Une variable n'existe que dans sa fonction/méthode/classe contenant, et ceux-ci remplaceront toutes les variables qui appartiennent à une portée plus large.

C'est pourquoi dans votre exemple, un signe euro sera affiché, et non un dollar. (Parce que le currencySymbol contenant le dollar a une portée (globale) plus large que le currencySymbol contenant le signe euro).

Quant à votre question spécifique: Oui, c'est un bon exemple de l'observation variable.

27
Madara Uchiha

En programmation informatique, l'observation des variables se produit lorsqu'une variable déclarée dans une certaine portée (bloc de décision, méthode ou classe interne) a le même nom qu'une variable déclarée dans une portée externe. Cette variable externe serait ombragée ...

donc je crois que votre exemple est bon.

vous avez une variable nommée globalement qui partage le même nom que la méthode interne. la variable interne ne sera utilisée que dans cette fonction. D'autres fonctions sans cette déclaration de variable utiliseront la fonction globale.

15
Eric Robinson

Oui, votre exemple est un exemple d'observation.

L'observation persistera également dans d'autres scénarios en raison du fonctionnement des fermetures en JavaScript. Voici un exemple:

var x = -1;
function xCounter() {
    var x = 0;
    return function() {
        ++x;
        return x;
    };
}

console.log(x);   // -1
counter = xCounter();
console.log(counter());   // 1
console.log(counter());   // 2
console.log(x);   // still -1, global was never touched

Notez que dans ce cas, même lorsque xCounter retourne, la fonction qu'il renvoie a toujours une référence à son propre x et les invocations de cette fonction interne n'ont aucun effet sur le global, même si l'original a depuis longtemps disparu de portée.

8
Platinum Azure

Nous ne pouvons pas définir une variable plus d'une fois. Mais nous pouvons définir dans différents domaines.

let name="tara"
if(true){
  let name="ALi"
  if(true){
    console.log(name)
  }
}

l'observation des variables se produit lorsqu'une variable dans une étendue locale utilise sa valeur au lieu d'une variable dans une étendue parent. Par conséquent, la valeur des variables locales est l'observation sur les parents.

dans le code ci-dessus, deux variables de nom sont définies mais elles ne sont pas définies dans la même étendue. donc console.log (nom) vérifiera la portée locale s'il trouve la variable de nom qu'il l'utilise, sinon il vérifie la portée parent une fois qu'il la trouve, il l'utilise pour ne pas aller à la racine.

0
Yilmaz