2010-06-15 8 views
1

Aujourd'hui, j'ai commencé à coder une page qui invite l'utilisateur à choisir leur spec PC, et le code est le suivantvariables locales et globales en javascript

<html> 
<title>Computer Specification Chooser</title> 

<head> 

<script type="text/javascript"> 

var compSpec = document.compChooser; 

function processorUnavailable_onclick() 
{ 
alert("Sorry that processor speed is currently unavailable"); 
compSpec.processor[2].checked = true; 

} 

</script> 

</head> 

<body> 

<form name="compChooser"> 

<p>Tick all components you wan included on your computer</p> 

<p> 
DVD-ROM 

<input type="checkbox" name="chkDVD" value="DVD-ROM" /> 
<br /> 

CD-ROM 
<input type="checkbox" name="chkCD" value="CD-ROM" /> 
<br /> 

Zip Drive 
<input type="checkbox" name="chkZIP" value="ZIP DRIVE" /> 
</p> 

<p> 
Select the processor speed you require 
<br /> 

<input type="radio" name="processor" value="3.8" /> 
3.8 GHZ 

<input type="radio" name="processor" value="4.8" onclick="processorUnavailable_onclick()" /> 
4.8 GHZ 


<input type="radio" name="processor" value="6" /> 
6 GHZ 
</p> 

<input type="button" name="btnCheck" value="Check Form" /> 

</form> 

</body> 
</html> 

Le problème que je suis confronté est la fonction que j'ai lié au gestionnaire d'événement, quand j'essaie de choisir le bouton radio de la valeur du processeur 4.8 GHz, oui il m'avertit avec le message à l'intérieur de la fonction, mais après cela, il n'effectue pas l'instruction suivante à l'intérieur de la fonction , c'est-à-dire vérifier la valeur de processeur suivante 6 GHZ. J'ai essayé mon effort pour le changer et le tester, et savoir quand j'ai placé le var compSpec = document.compChooser comme variable locale dans la fonction au lieu d'une variable globale, l'instruction suivante pourrait être exécutée.

Mais je pensais pour une variable globale, elle est accessible partout sur la page et aussi dans une fonction.Mais pourquoi maintenant je ne peux pas y accéder à l'intérieur de ma fonction ?? En outre, je tombe sur un article étrange lors de googler, il dit que quand une variable globale est créée, elle est ajoutée à l'objet window.I juste curieux de savoir pourquoi cela se produit ?? Et quels sont les avantages et les utilisations?

MERCI

Répondre

2

En javascript, une variable globale est une propriété de l'objet global. Lors de l'exécution dans un navigateur, l'objet global est l'objet window. Donc, si vous n'utilisez pas le mot-clé var, vous ne déclarez pas de variable, mais définissez une propriété de l'objet window. C'est utile car l'objet window est accessible de partout, tout comme votre variable globale.

Si vous déclarez compSpec en tant que variable (var) dans votre fonction processorUnavailable_onclick, sa portée sera limitée à cette fonction (et aux fermetures créées à l'intérieur). Si vous définissez compSpec comme une variable globale (ie une propriété de window), il sera disponible de partout:

function body_onload() 
{ 
window.compSpec = document.compChooser; 
} 

function processorUnavailable_onclick() 
{ 
alert("Sorry that processor speed is currently unavailable"); 
window.compSpec.processor[2].checked = true; 
} 

...<body onload="body_onload()">... 
1

Votre problème est cette ligne: compSpec = document.compChooser

Lorsque ce code est exécuté, la forme n'est pas encore partie du DOM est indéfini si spécification de complétion. Placez votre code à la fin du document ou exécutez-le dans un gestionnaire onload et cela fonctionnera.

+0

Enfin, je sais que le problème est sur l'analyse syntaxique vers le bas, mais un autre problème est ?? Pourquoi quand je l'appelle une fonction avant sa création, il est encore possible d'être exécuté ?? – caramel1995

+1

C'est une bonne question, il y a quelques bonnes réponses ici: http://stackoverflow.com/questions/261599/why-can-i-use-a-function-before-its-defined-in-javascript – meouw