Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Значение в переменной (https://javascript.ru/forum/misc/43219-znachenie-v-peremennojj.html)

nvzc 27.11.2013 10:50

Значение в переменной
 
Всем привет!
В видеокурсе Ильи, был примерчик примерно такого содержания
var name = "Вася"; 
     function whatIsName() {
           alert(name);
           var name = "Петя";  
     }   
     whatIsName(); // здесь получаем undefined



Здесь все понятно почему.
Если var name = "Петя"; объявить до Алерта, тогда получим "Петя"

А не понятно следующее:
Убираем эту строку var name = "Петя"; из функции.

Итого у нас есть:
1. Глобальная переменная name
2. Функция декларейшн
3. Результат в алерте "Вася"

Вопросы:
почему если объявить нейм=вася после функции, результат не undefined, а тоже Вася? переменная ведь проинициализировалась и находится с undefined, и значение попадает уже после функции как и было с Петей


function whatIsName() {
           alert(name);
      //     var name = "Петя";
     }    
     whatIsName(); // ВАСЯ
     var name = "Вася";


var name = "Вася";
     function whatIsName() {
           alert(name);
      //     var name = "Петя";
     }    
     whatIsName(); // ВАСЯ

ksa 27.11.2013 11:21

Цитата:

Сообщение от nvzc
почему если объявить нейм=вася после функции, результат не undefined, а тоже Вася?

Чеш ты врешь-то? :D

function whatIsName() {
   alert(name);
}    
whatIsName();
var name = "Вася";

ksa 27.11.2013 11:30

Rise, у меня вообще тут дает "js-frame-highlighter_289918" :cray:

ksa 27.11.2013 11:31

Цитата:

Сообщение от Rise
второй раз запусти будет Вася

На странице стабильный undefined.

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function whatIsName() {
   alert(name);
}    
whatIsName();
var name = "Вася";
</script>
</head>
<body>
</body>
</html>

danik.js 27.11.2013 11:35

Потому что свойство window.name

Для чистоты же эксперимента:

(function(){

function whatIsName() {
   alert(name);
}   
whatIsName();
var name = "Вася";

})();

Или же поменять имя переменной на другое:

function whatIsName() {
   alert(_name);
}   
whatIsName();
var _name = "Вася";


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

nvzc 27.11.2013 12:53

Сам натупился :)
все оказалось логичным


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