Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Переменные в функции

#переменные #javascript


var title = "external title";
function example(){
    title = "changing external title";
    alert(title);
    var title = "internal title";
}

example();
alert(title);

Почему "при запуске кода сгенерируются сообщения "changing external title", а затем
"external title", показывающее, что внешняя переменная title не была изменена внутри
функции. " Разве title внутри функции не глобальная?    


Ответы

Ответ 1



Нет, вы же пишите в последней строке var title, а интерпретатор - двухпроходной, сначала он ищет объявления типа function name(){}, var name в объявляемой области видимости и делает эти переменные локальными, а потом исполняет код. Благодаря этому поведению можно писать function Foo() { console.log('Me not run'); } function(){ var a=[Foo,Bar]; a[0](); function Foo() { console.log("Hello Foo"); } function Bar() { console.log("Hello Bar"); } }(); вас же не удивляет что Foo и Bar локальны для этой области видимости и что a[0] не undefined ? единственное что нужно помнить, что если вы объявляете функцию, то она станет сразу определена, еще на первом проходе, а если переменную, то правая часть объявления будет выполнена только во втором проходе.

Комментариев нет:

Отправить комментарий