4 votes

Est-ce que jQuery et JavaScript ont des espaces de noms différents ?

J'ai ce code dans jQuery .

$(document).ready(function(){ 

var fieldCounter = 0;  ...

J'ai une fonction jQuery qui incrémente cette valeur.

Cela fonctionne, mais je ne peux pas accéder à cette valeur sur la page à partir d'une fonction non-jQuery ? L'inverse est également vrai, si je le scope en JavaScript, par ex.

<script type="text/javascript">

var fieldCounter = 0;

Je peux y accéder à partir de javascript mais jQuery ne peut pas l'afficher ?

Je suis probablement en train de faire quelque chose de vraiment stupide ?

8voto

deceze Points 200115

Cela n'a rien à voir avec jQuery, mais avec la portée de Javascript.

$(document).ready(function() { 
   var fieldCounter = 0;
});

fieldCounter est déclaré à l'intérieur d'un function . Comme Javascript a une portée de fonction, la variable n'est pas visible en dehors de la fonction.

BTW, jQuery i Javascript, ils jouent selon les mêmes règles, ce ne sont pas deux technologies différentes.

Des réponses exhaustives peuvent être trouvées ici : Quelle est la portée des variables en JavaScript ?

2voto

Matthew Flaschen Points 131723

JQuery n'est pas magique. C'est une bibliothèque JavaScript. Votre problème est que vous définissez une variable locale à l'intérieur d'une fonction. En raison de la manière dont fonctionne le marquage lexical en JavaScript, vous ne pouvez pas y accéder en dehors de cette fonction (à l'exception des fermetures, qui ne s'appliquent pas ici).

Il est fort probable que vous souhaitiez simplement.. :

$(document).ready(function(){ 

fieldCounter = 0;

Cela en fera une variable globale.

Modification : l'utilisation d'un espace de noms et/ou la déclaration d'une variable globale est plus propre, mais n'est pas obligatoire.

1voto

Clint Tseng Points 2070

Dans le premier cas, le problème réside dans le champ d'application. En mettant le var à l'intérieur d'une déclaration de fonction, vous l'avez cadré pour qu'il soit accessible à l'intérieur de cette fonction.

Il se passe quelque chose d'autre dans le second cas ; il faudrait plus de code pour savoir ce qui se passe.

La portée globale en Javascript est window . Cela signifie que lorsque vous déclarez des variables directement dans <script> vous pouvez les récupérer en demandant des window.variableName .

Un moyen courant de résoudre ce type de problèmes de portée consiste à créer un cadre d'espace de noms. Si vous le faites correctement, vous pouvez appeler myNamespace.subNamespace.variable et d'avoir la certitude que, parce qu'il est explicitement lié à window vous pouvez le récupérer où que vous soyez.

N'oubliez pas que jQuery est construit en Javascript. Il n'a rien de spécial.

0voto

alex Points 186293

JavaScript a une portée de fonction.

var count = 8;

var myfunction = function() {

   var newCount = count + 1;

};

alert(newCount); // undefined

0voto

Reigel Points 34008

C'est à cause de la portée de javascript... essayez de lire cette

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X