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.

21
demandé sur Andrew Liu 2013-07-11 05:19:52

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";.

30
répondu McGarnagle 2013-07-11 01:22:22

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:

6
répondu Michał Perłakowski 2017-05-23 12:03:02

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 ;
0
répondu Bob 2017-01-11 15:25:28