#переменные #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 ? единственное что нужно помнить, что если вы объявляете функцию, то она станет сразу определена, еще на первом проходе, а если переменную, то правая часть объявления будет выполнена только во втором проходе.
Комментариев нет:
Отправить комментарий