Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.07.2018, 20:23
Новичок на форуме
Отправить личное сообщение для 7ver2009 Посмотреть профиль Найти все сообщения от 7ver2009
 
Регистрация: 30.07.2018
Сообщений: 9

Странный skope у функции
Доброго времени суток. На собеседовании задали вопрос:

var name = "Jonh";
function sayHi(){ alert(name); }

setTimeout(function(){
  var name = "Mike";
  sayHi();
}, 1000);

Что выведет console.log() - Jonh, или Mike? Ошибся сказав что Mike. Выводит Jonh. Тотально не понимаю поведения этого кода.
Обьясните пожалуйста в чем дело. Желательно в деталях.

Последний раз редактировалось 7ver2009, 31.07.2018 в 08:05.
Ответить с цитированием
  #2 (permalink)  
Старый 30.07.2018, 20:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

7ver2009,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 30.07.2018, 20:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

7ver2009,
вы создали две переменные, функция sayHi "видит" только первую переменную.
если нужно вывести Mike, уберите создание второй переменной, подумайте что лишнее?

Последний раз редактировалось рони, 30.07.2018 в 20:35.
Ответить с цитированием
  #4 (permalink)  
Старый 30.07.2018, 21:25
Новичок на форуме
Отправить личное сообщение для 7ver2009 Посмотреть профиль Найти все сообщения от 7ver2009
 
Регистрация: 30.07.2018
Сообщений: 9

Спасибо, вроде разобрался.
Ответить с цитированием
  #5 (permalink)  
Старый 30.07.2018, 21:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

7ver2009,
var name = "Jonh";
 function sayHi(){ alert(name); }

 setTimeout(function(){
 name = "Mike";
 sayHi();
 }, 1000);
Ответить с цитированием
  #6 (permalink)  
Старый 31.07.2018, 08:09
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от 7ver2009
Что выведет console.log()
Путаешь с alert()
Сообщение от 7ver2009
Обьясните пожалуйста в чем дело.
Функция захватывает переменные в месте где она определяется, а не там где вызывается. Функции всё равно какие переменные вокруг в месте вызова, она тянет переменные с места определения.

Последний раз редактировалось Rise, 31.07.2018 в 08:12.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача результата функции, другой функции Aleksandr Chirkov Элементы интерфейса 3 24.06.2017 17:32
Можно ли так использовать callback функции? Denwf Node.JS 2 14.03.2017 10:20
Изменение прототипа функции tsigel Общие вопросы Javascript 11 15.05.2014 01:03
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21