Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод интерпритации JS-кода (https://javascript.ru/forum/misc/23756-vyvod-interpritacii-js-koda.html)

Harvey 05.12.2011 00:03

Вывод интерпритации JS-кода
 
Привет!

Друзья, во-первых, есть и возможность каким-либо образом посмотреть код интерпретации js, то есть код, каким его видит js-интерпретатор.

А во-вторых, возникла проблема с разбором такого кода

var a = 1; 
function b() { 
    a = 10; 
    return; 
    function a() {} 
} 
b(); 
alert(a);


Этот код взят из статьи на хабре Область видимости в JavaScript и «поднятие» переменных и объявлений функций

Я прочитал статью, но все равно четко не могу себе объяснить почему этот код выводит 1, а не что-то другое.

Подскажите пожалуйста по обоим вопросам

devote 05.12.2011 00:24

Цитата:

Сообщение от Harvey
то есть код, каким его видит js-интерпретатор.

Таким же видет как и ты.

Цитата:

Сообщение от Harvey
А во-вторых, возникла проблема с разбором такого кода ...

потому что ты создаешь функцию внутри scope функции "b" поэтому "а" считается локальной.

Harvey 05.12.2011 00:37

Цитата:

Сообщение от devote
потому что ты создаешь функцию внутри scope функции "b" поэтому "а" считается локальной.

Что такое scope-функция?

devote 05.12.2011 01:02

Цитата:

Сообщение от Harvey
Что такое scope-функция?

нет, это не функция, это область видимости... внутри функции существует собственная область видимости. В ней ты создаешь функцию "а" тем самым делаешь переменную "а" локальной, а при вызове функции "b" ты просто переназначаешь значение локальной "а"

devote 05.12.2011 01:06

var a = 1;  
function b() {  
    alert( typeof a );
    return;  
    function a() {}  
}  
b();  
alert(a);

Harvey 05.12.2011 10:08

Спасибо, я разобрался. Но вот еще вопрос. Мне не совсем ясно как именно здесь работает return, какая роль у этой функции в данном примере?

devote 05.12.2011 10:21

Цитата:

Сообщение от Harvey
Мне не совсем ясно как именно здесь работает return, какая роль у этой функции в данном примере?

Обычный выход из функции, ретурн можно ставить в любой части кода, это нормальная практика возвращаться рано или поздно в зависимости от условий.

Harvey 05.12.2011 10:33

А как тогда выполняется вложенная функция a(), если return стоит перед ней

devote 05.12.2011 10:45

она инициализируется до вызова функции b, во время первого прохода интерпретатора.

Harvey 05.12.2011 10:48

ого, спасибо большое!


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