2010-06-15 7 views
1

Сегодня, я начал кодировать страницу, которая подскажет пользователю выбрать свой ПК спецификации, а код, как следоватьЛокальные и глобальные переменные в 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> 

Проблема я столкнулся находится на функции что я привязываюсь к обработчику событий, когда я пытаюсь выбрать радиокнопку процессора 4,8 ГГц, да, он предупреждает меня с сообщением внутри функции, но после этого он не выполняет следующий оператор внутри функции , то есть проверить следующее значение процессора 6 GHZ.

Я стараюсь изменить его и проверить на нем, и выясните, когда я установил var compSpec = document.compChooser в качестве локальной переменной внутри функции вместо глобальной переменной, следующий оператор мог быть выполнен.

Но я думал о глобальной переменной, он доступен везде и на странице, а также внутри функции. Но почему теперь я не могу получить доступ к ней внутри моей функции? Любая идея?

Кроме того, я наткнулся на странную статью во время поиска в Интернете, в ней говорится, что когда создается глобальная переменная, она добавляется к объекту window.I просто интересно, почему это происходит? И каковы преимущества и возможности использования этого?

СПАСИБО

ответ

2

В javascript глобальная переменная является свойством глобального объекта. При работе внутри браузера глобальным объектом является объект window. Поэтому, если вы не используете ключевое слово var, вы фактически не объявляете переменную, вместо этого вы устанавливаете свойство объекта window. Это полезно, потому что объект window доступен извне, а также ваша глобальная переменная.

Если вы заявляете compSpec как переменную (var) внутри вашей функции processorUnavailable_onclick, ее объем будет ограничен этой функцией (и затворами, созданными внутри нее). Если вы установите compSpec в качестве глобальной переменной (т.е. свойство window), то он будет доступен везде:

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

Ваша проблема эта линия: compSpec = document.compChooser

При выполнении этого кода, форма еще не является частью DOM так compSpec не определен. Поместите свой код в конец документа или запустите его в обработчике onload, и он будет работать.

+0

Наконец-то я знаю, что проблема заключается в разборе вниз, но еще одна проблема, это ?? Почему когда я звоню функция перед ее созданием, все равно можно выполнить? – caramel1995

+1

Это хороший вопрос, есть несколько хороших ответов здесь: http://stackoverflow.com/questions/261599/why-can-i-use-a-function-before-its-defined-in-javascript – meouw

Смежные вопросы