Задать вопрос
@Chalovik

JS, В каком scope лежит переменная?

Всем привет!
Есть банальный пример:
var name = "Vaysa";

function f() {
     alert(name);
} 

setTimeout(function() {
     var name = "Petya";
     f();
}, 1000);


Понятно, что выводит имя Вася, потому что функция обращается к глобальной переменной.
Но вот я никак не могу понять, куда девается переменная name в функции в setTimeout ? И как вызвать функцию с этой переменной не передавая ее в функцию? Пробовать через call/apply/bind бессмысленно, т.к. функция не создает свой контекст. Через замыкание тоже ничего не получилось.
Кто-нибудь, может разъяснить ситуацию?
  • Вопрос задан
  • 145 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
У JS область видимости определяется при разборе а не при выполнении, у Фленегана вроде она называется "синтаксическая область видимости", хотя на счет термина я могу и ошибаться.
https://www.books.ru/books/javascript-podrobnoe-ru... тут єто неплохо разжевано.

конкретно с вашим куском кода ваша задача "И как вызвать функцию с этой переменной не передавая ее в функцию?" выглядит как говнокод, потому что в большом проекте можно будет сломать голову откуда беруться переменные с которыми работает функция. Попробуйте обобщить задачу, может у нее есть более красивое решение.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
f = function()  {
     alert(name);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы