Глобальная переменная, интересная задача JS
var foo = 10; function bar() { foo = 20; var foo = 30; } bar(); console.log( "Foo = " + foo); //Вывод Foo = 10 Кто нибудь знает почему? :help: Как это объяснить? |
Потому что не важно, где вы внутри ф-ции объявили переменную. Важно, что она была объявлена, а значит - локальная.
|
Потому, что команда вар определяется при входе в контекст функции, а все действия на втором шаге во время построчного исполнения.
1. var foo -> foo === undefined, window.foo === 10 2. foo = 20 -> foo === 20, window.foo === 10 3. foo = 30 -> foo === 30, window.foo === 10 |
Ок, но если сделать так:
var foo = 10; function bar() { foo = 20; } bar(); console.log( "Foo = " + foo); //Вывод Foo = 20 Тогда почему сейчас foo = 20? |
Цитата:
|
Потому, что foo глобальная переменная и объявлена вне функции, в функции объявление переменной нет вообще, то есть даже значения undefined нет, по этому поиск переменной переходит на контекст выше - глобальный.
Алгоритм парсинга контекста повторяется для каждого контекста, а не в общем для всех. http://dmitrysoshnikov.com/ecmascrip...tion-contexts/ http://dmitrysoshnikov.com/ecmascrip...4-scope-chain/ |
Получается что JS интерпретатор обнаружив объявление переменной
с помощью ключевого слова var - выполняет первее всего. И неважно в каком месте, в тексте функции, оно стоит (будь var foo ниже строки где переменная используется) Правильно? |
Да.
|
Всем, спасибо :)
|
Цитата:
|
Часовой пояс GMT +3, время: 01:27. |