Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему переменная не может быть глобальной? (https://javascript.ru/forum/misc/27792-pochemu-peremennaya-ne-mozhet-byt-globalnojj.html)

LeD4eG 25.04.2012 02:06

Почему переменная не может быть глобальной?
 
Доброго ночи!

При разборе, казалось бы легкого скрипта, обнаружил для себя не совсем понятный момент.

var planetList = new Array();
  planetList[0] = 'Меркурий';
  planetList[1] = 'Венера';
  planetList[2] = 'Земля';
  planetList[3] = 'Марс';

var wayToSun = new Array();
  wayToSun[0] = '52 млн.км';
  wayToSun[1] = '108 млн.км';
  wayToSun[2] = '149 млн.км';
  wayToSun[3] = '228 млн.км';

var planetDiameter = new Array();
  planetDiameter[0] = '4 880 км';
  planetDiameter[1] = '12 100 км';
  planetDiameter[2] = '12 750 км';
  planetDiameter[3] = '6 800 км';

function doCount(){
   var userText = document.getElementById('planetName').value;
   for( var i = 0; i < planetList.length; i++) {
     if(planetList[i] == userText){
        break;
     }
   }
document.write('<p class="hightlight">'+planetList[i]+'</p>');
document.write('<p class="hightlight">Расстояние до солнца: '+wayToSun[i]+'</p>');
document.write('<p class="hightlight">Диаметр планеты: '+planetDiameter[i]+'</p>');
}



<label for="planetName">Введите название планеты:</label>
<input type="text" id="planetName" name="planetName" />
<input type="button" id="counter" value="Рассчитать" onclick="doCount()"/>


Как я и говорил всё до банальности просто, мат.часть так скажем. Но вот ситуацию почему скрипт перестаёт "работать", когда переменная userText объявляется вне тела функции (если я всё правильно понимаю, в таком случае она является глобальной), я никак не могу осилить.

LeD4eG 25.04.2012 02:28

Так я же, вроде, его описал? если объявить переменную userText вне тела функции, то всё рушится - userText = null, вывод в документ происходит undefined переменными, что вообще мной никак не усваивается.

trikadin 25.04.2012 02:33

LeD4eG, покажите, как вы это делаете.

LeD4eG 25.04.2012 02:41

Вот так:

var planetList = new Array();
	planetList[0] = 'Меркурий';
	planetList[1] = 'Венера';
	planetList[2] = 'Земля';
	planetList[3] = 'Марс';
			
     var wayToSun = new Array();
	wayToSun[0] = '52 млн.км';
	wayToSun[1] = '108 млн.км';
	wayToSun[2] = '149 млн.км';
	wayToSun[3] = '228 млн.км';
			
     var planetDiameter = new Array();
	planetDiameter[0] = '4 880 км';
	planetDiameter[1] = '12 100 км';
	planetDiameter[2] = '12 750 км';
	planetDiameter[3] = '6 800 км';

var userText = document.getElementById('planetName').value;
	
  function doCount(){
    for( var i = 0; i < planetList.length; i++) {
	if(planetList[i] == userText){
        	break;
	}
    }
   document.write('<p class="hightlight">'+planetList[i]+'</p>');
   document.write('<p class="hightlight">Расстояние до солнца: '+wayToSun[i]+'</p>');
   document.write('<p class="hightlight">Диаметр планеты: '+planetDiameter[i]+'</p>');
}

LeD4eG 25.04.2012 04:51

Да, именно так. спасибо большое!


Часовой пояс GMT +3, время: 02:37.