ReferenceError: la variable n'est pas définie
J'ai rencontré ce problème parfois mais je ne sais toujours pas ce qui le cause.
, j'ai ce script dans la page:
$(function(){
var value = "10";
});
Mais le navigateur dit "ReferenceError: la valeur n'est pas définie". Cependant, si je vais à la console du navigateur et que j'entre soit
10
Ou
var value = "10";
L'un ou l'autre peut renvoyer 10. Quel est le problème avec mon script?
Edit: il suffit de se débarrasser de " var " peut résoudre le problème.
3 réponses
Il est déclaré dans une fermeture, ce qui signifie qu'il n'y est accessible qu'ici. Si vous voulez une variable accessible globalement, vous pouvez supprimer le var
:
$(function(){
value = "10";
});
value; // "10"
Cela équivaut à écrire window.value = "10";
.
Les Variables ne sont disponibles que dans la portée que vous les avez définies. Si vous définissez une variable dans une fonction, vous ne pourrez pas y accéder en dehors de celle-ci.
Définissez la variable avec var
en dehors de la fonction (et bien sûr avant elle), puis assignez 10
à la fonction intérieure:
var value;
$(function() {
value = "10";
});
console.log(value); // 10
Notez que vous ne devez pas omettre la première ligne de ce code (var value;
), car sinon vous affectez une valeur à une variable indéfinie. C'est une mauvaise pratique de codage et ne fonctionnera pas en stricte mode. Définir une variable (var variable;
) et attribuer une valeur à une variable (variable = value;
) sont deux choses différentes. Vous ne pouvez pas attribuer de valeur à une variable que vous n'avez pas définie.
Cela peut ne pas être pertinent ici, mais $(function() {})
est un raccourci pour $(document).ready(function() {})
, qui exécute une fonction dès que le document est chargé. Si vous voulez exécuter quelque chose immédiatement, vous n'en avez pas besoin, sinon méfiez-vous que si vous l'exécutez avant que DOM ne soit chargé, la valeur sera undefined
jusqu'à ce qu'il soit chargé, donc console.log(value);
placé juste après $(function() {})
retourne undefined
. En d'autres termes, il s'exécuterait dans l'ordre suivant:
var value;
console.log(value);
value = "10";
Voir aussi:
A obtenu l'erreur (dans la fonction init) avec le code suivant;
"use strict" ;
var hdr ;
function init(){ // called on load
hdr = document.getElementById("hdr");
}
... tout en utilisant le navigateur stock sur un Samsung Galaxy Fame (téléphone de merde qui en fait un bon testeur) - userAgent ; Mozilla / 5.0 (Linux; U; Android 4.1.2; FR-gb; GT-S6810p Build/Jzo54k) AppleWebKit/534.30 (KHTML, comme Gecko) Version/4.0 Mobile Safari / 534.30
Le même code fonctionne partout ailleurs que j'ai essayé, y compris le navigateur stock sur un ancien téléphone HTC-userAgent ; Mozilla / 5.0 (Linux; U; Android 2.3.5; FR-gb; Htc_wildfires_a510e Build/GRJ90) AppleWebKit/533.1 (KHTML, comme Gecko) Version/4.0 Mobile Safari / 533.1
Le correctif pour cela était de changer
var hdr ;
À
var hdr = null ;