Comment l'accès fonction externe variable dans imbriquée à l'intérieur de la fonction en JS
Je suis nouveau sur le JS et ayant un doute avec l'exemple ci-dessous. Veuillez consulter les commentaires en ligne.
JS:
function outer() {
var x = 5;
console.log("outer",x); //Prints 5
console.log("-----------");
function inner() {
var x = 6;
console.log("inner",x); //Prints 6
console.log("outer",x); //Prints 6. How to print 5
console.log("-----------");
function _inner() {
var x = 7;
console.log("_inner",x); //Prints 7
console.log("inner",x); //Prints 7. How to print 6
console.log("outer",x); //Prints 7. How to print 5
console.log("-----------");
}
_inner();
}
inner();
}
outer();
- passer comme paramètres de fonctions intérieures avec un nom différent, je suppose?
- Si une variable locale est déclarée avec un nom qui est le même comme une variable globale, puis (à l'exception du cas de la réelle portée globale) il n'y a tout simplement aucun moyen d'accéder à l'extérieur de la variable.
- Est-ce intentionnel que tous les trois variables ont exactement le même nom? En changeant simplement les noms de "intérieure" de la variable à
y
et le "_inner" variablez
, vous obtiendrez les résultats que vous attendiez. - J'ai volontairement gardé comme " x " ... je sais que si j'ai différents noms de variables ou de passer comme argument ...l'exemple fonctionne parfaitement bien... je voulais juste savoir est-il de toute façon comme dans l'exemple.
- la question est alors pourquoi avez-vous besoin d'avoir les mêmes noms de variables?
- Il n'y a pas de mécanisme pour faire exactement ce que vous voulez. La solution est d'utiliser des variables avec des noms différents. Ce que vous voulez, c'est complètement impossible en javascript (au moins jusqu'à ES6)
- déjà répondu ici.. stackoverflow.com/questions/4001414/...
Vous devez vous connecter pour publier un commentaire.
Peut-être cela vous aide. Assigner des variables de vos fonctions imbriquées parce que, par conséquent, il est clair que varible devraient être utilisés, mais ils ont diffèrent les uns des autres d'une certaine façon(nom ou par l'intermédiaire de l'espace de noms):
Dans cet exemple, seules deux des trois varibles sont de céder(externe x) pour les fonctions, car sinon, vous pourriez évaluer extérieur.x provenant de l'extérieur de extérieur de la fonction et de l'affecter n'importe quelle valeur:
Mais quand une variable locale est définie:
Alors il n'y a aucune chance pour affecter cette variable locale(x) toute valeur à partir de l'extérieur de fonction externe.
outer.x = 5;
signifie la création de la propriété prototype ?Javascript n'est pas par défaut ont bloqué la portée de la variable à l'instar de nombreux langages de programmation. Cela signifie que la variable x comme vous déclarées ci-dessus, est la même variable.
Je suggère de ne pas utiliser le même nom de variable dans une fonction imbriquée. Il devient difficile à lire et à déboguer. Aussi avez-vous vraiment besoin d'avoir de fonction imbriquée ?
Ou vous pouvez utiliser l'objet en la déclarant comme
quand on réutiliser le nom de la variable à l'intérieur d'une méthode, puis uniquement le bloc-portée de travail. signifie champ de travail. Pour ces variables, les accolades {. . .}
définit la portée.
ce que vous pouvez faire est d'essayer
définir des Variables Globales