Javascript.RU

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

Вопрос на собеседовании
function get() {
var a = 1;
function summ() {
var b = 2;
b = b + a;
var a = 3;
return b;
}
return summ();
}
Что вернет функция get?
Ход моих мыслей такой был: смотрим в функцию summ там обьвление a и b они локальные, несмотря на то что а обьявлена в конце, интерператоро при проходе все сделает ок, и при вычеслении b = b + a; получи b= 5;
но в реалии какойто яд получился, в хроме потестил ради интереса и вообще в ауте. при прощете b=b+a у меня a = undefined !!! как такто, они при любоим раскладе не должно быть undefined, как минимум через замыкание вытянулобы а=1
как такто расстолкуйте
Ответить с цитированием
  #2 (permalink)  
Старый 04.07.2016, 14:36
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

ibahob,

на момент выполнения строки "b = b + a;" в переменной b двойка, переменная "a" здесь используется самая внутренняя (при выполнении кода объявления переменных через var переносятся в начало функции), но значение а равно undefined, т.к. 3 ей ещё не присвоилось.

Т.е. на самом деле функция summ выполнится так:
function summ() {
  var b, a; // объявили переменные, они равны undefined
  b = 2;
  b = b + a; // 2 + undefined
  a = 3;
  return b;
}

Последний раз редактировалось Яростный Меч, 04.07.2016 в 14:38.
Ответить с цитированием
  #3 (permalink)  
Старый 05.07.2016, 07:33
Аватар для Makarov
Профессор
Отправить личное сообщение для Makarov Посмотреть профиль Найти все сообщения от Makarov
 
Регистрация: 08.07.2013
Сообщений: 212

Еще раз напишу другими словами то, что написал Меч.

Ключевая штука которую Вы тут не понимаете называется hoisting.
Это то, что когда вы пишете var a; это объявление распространяется на всю текущую область видимости. То есть в данном случае где бы Вы его не написали это эквивалентно написанию в начале функции. Именно поэтому значение a не вытягивается из замыкания: переменная a уже есть в локальном скоупе, поэтому берется оттуда. Присваивание не всплывает, только объявление. Поэтому a на момент обращения равно undefined.
Ответить с цитированием
  #4 (permalink)  
Старый 05.07.2016, 10:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Makarov,
Яростный Меч,
спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 05.07.2016, 13:20
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

рони,
за что? неужели это был ты?
Ответить с цитированием
  #6 (permalink)  
Старый 05.07.2016, 13:44
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Яростный Меч,
даже забыл как оформлять код
Ответить с цитированием
  #7 (permalink)  
Старый 05.07.2016, 13:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Яростный Меч,
будет место куда я смогу послать жаждущих знаний, туговато у меня с обьяснялками, но приходится, проще написать рабочий код, чем обьяснять почему не работает чужой, да и когда коротко и по делу, лучше и в собственной голове укладывается.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меню с выезжающим сайдбаром Jaz Элементы интерфейса 17 26.06.2016 19:21
Неизвестный идентификатор FaNaT_96 Общие вопросы Javascript 14 01.05.2016 18:15
вопрос по toDataURL() GodZiLA Общие вопросы Javascript 0 03.06.2014 17:21
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13