web-dev-qa-db-fra.com

ReferenceError: la variable n'est pas définie

J'ai parfois rencontré ce problème, mais je ne sais toujours pas ce qui en est la 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 dans la console du navigateur et que je saisis

10

ou

var value = "10";

l'un ou l'autre peut retourner 10. Quel est le problème avec mon script?

Edit: se débarrasser de "var" peut résoudre le problème.

24
Andrew Liu

Il est déclaré à l'intérieur d'une fermeture, ce qui signifie qu'il n'est accessible que là-bas. Si vous voulez une variable accessible globalement, vous pouvez supprimer le var:

$(function(){
    value = "10";
});
value; // "10"

Cela équivaut à écrire window.value = "10";.

33
McGarnagle

Les variables sont disponibles uniquement dans la portée que vous les avez définie. Si vous définissez une variable à l'intérieur d'une fonction, vous ne pourrez pas y accéder en dehors.

Définissez la variable avec var en dehors de la fonction (et bien sûr avant), puis affectez-lui 10 À l'intérieur de la fonction:

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 non définie. Il s'agit d'une mauvaise pratique de codage et ne fonctionnera pas en mode strict. 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 prenez garde 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() {}) renverra undefined. En d'autres termes, il s'exécuterait dans l'ordre suivant:

var value;
console.log(value);
value = "10";

Voir également:

6

Vous avez 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 de 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; en-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 de stock sur un ancien téléphone HTC - userAgent; Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533.1 (KHTML, comme Gecko) Version/4.0 Mobile Safari/533.1

La solution était de changer

var hdr ;

à

var hdr = null ;
1
Bob