Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Странный skope у функции (https://javascript.ru/forum/misc/74678-strannyjj-skope-u-funkcii.html)

7ver2009 30.07.2018 20:23

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

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

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

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

рони 30.07.2018 20:29

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

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


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 30.07.2018 20:32

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

7ver2009 30.07.2018 21:25

Спасибо, вроде разобрался.

рони 30.07.2018 21:29

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

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

Rise 31.07.2018 08:09

Цитата:

Сообщение от 7ver2009
Что выведет console.log()

Путаешь с alert()
Цитата:

Сообщение от 7ver2009
Обьясните пожалуйста в чем дело.

Функция захватывает переменные в месте где она определяется, а не там где вызывается. Функции всё равно какие переменные вокруг в месте вызова, она тянет переменные с места определения.


Часовой пояс GMT +3, время: 02:49.