2009-08-27 11 views
3

Voici les scripts de problème:Portée de la variable JavaScript déclarée en ligne

Ceci est à partir du fichier HTML:

<script type="text/javascript"> 
    var devices_record = "some string"; 
</script> 
<script type="text/javascript" src="/js/foo.js"></script> 

Ceci est de foo.js:

function bar() { 
    devices_record = "assign new string"; 
} 

Le rapport d'erreur par HttpFox est que devices_ record n'est pas défini. Ce qui donne? Je pensais que devices_ record sera une variable d'envergure mondiale, donc il devrait être accessible depuis n'importe où.

+1

Vous devriez pouvoir accéder à devices_record. Je pense qu'il te manque quelque chose d'autre. Est-ce le code exact OU vous avez créé un échantillon pour illustrer le problème? – SolutionYogi

Répondre

3

Votre scénario de test fonctionne pour moi. Voici mon test complet:

foo.js:

function bar() { 
    alert(devices_record); 
    devices_record = "assign new string"; 
    alert(devices_record); 
} 

foo.html:

<html> 
<head> 
    <script type="text/javascript"> 
    var devices_record = "some string"; 
    </script> 
    <script type="text/javascript" src="foo.js"></script> 
</head> 
<body onload="bar()"> 
</body> 

Je reçois deux alertes, le premier dit "some string", la deuxième "assign new string".

Votre problème existe ailleurs dans votre code.

+0

Vous avez raison. Le problème existait ailleurs où dans le code. Je vous remercie. –

0

Déclarer devices_record dans foo.js. Puis, référencez-le à partir du javascript incorporé dans le code HTML.

Vous pouvez également envisager d'emballer vos foo.js Code dans une classe, avec devices_record comme un champ/propriété. Cela peut rendre beaucoup plus facile le piégeage des erreurs, entre autres choses. Tidbit: aussi, si la déclaration devices_record a été placée avant l'inclusion du script, le script peut y accéder. Cependant, méfiez-vous de déclarer des variables en dehors du fichier qui les utilise. Si vous avez décidé d'inclure ce script dans une page qui oublie de déclarer devices_record, vous allez rencontrer des erreurs.

1

Je crois que votre code donné fonctionne. Au moins l'exécution du code que vous donnez ci-dessus ne provoquera aucune erreur.

De même, il est préférable d'inclure vos dépendances telles que foo.js avant d'utiliser tout js en ligne. Cela garantit que votre bibliothèque est chargée avant d'appeler des fonctions fournies à votre bibliothèque. De plus, les opérateurs d'affectation ne provoqueront pas d'erreurs 'devices_ record is not defined' car vous le définissez avec l'opérateur d'affectation.

Votre erreur est probablement due à autre chose.

+0

Bon point sur l'affectation. Indique que le demandeur omet le code réel qui génère l'erreur. –

Questions connexes