как работает подъем? разница между функцией и переменной

могу ли я узнать, как выполняется этот код?

function scope() {
  return hosting;

  function hosting() {
    var hosting = '15';
  }
  var hosting = 12;

}

console.log(typeof scope())

здесь эта функция возврата кода, теперь мы js engine переместим объявление вверх, чтобы мы получили функцию,

function scope() {
  return hosting;

  var hosting = 12;
}

console.log(typeof scope())

но теперь, почему это не возвращаемый номер?, но я знаю, что нам нужно использовать let, чтобы избежать этого


person Selva Ganapathi    schedule 09.06.2020    source источник
comment
Это поднятие (не хостинг) . Но на самом деле нет веской причины использовать var вместо let и const.   -  person Andreas    schedule 09.06.2020
comment
ой мой плохой, я застрял с устаревшим кодом   -  person Selva Ganapathi    schedule 09.06.2020


Ответы (3)


Он не возвращает число 12, потому что поднятие работает только для объявления фактической переменной, а не для присвоения ей значения.

Это означает, что ваш код для компилятора выглядит так:

function scope() {
    var hosting;
    return hosting;

    hosting=12;

}

Также помните, что все после return не выполняется.

person Gesha    schedule 09.06.2020
comment
отлично, но в fn мы получаем всю функцию перед оператором возврата правильно? - person Selva Ganapathi; 09.06.2020
comment
@ SelvaGanapathi Я не понял, что ты имеешь в виду? - person Gesha; 09.06.2020
comment
понял чувак.. - person Selva Ganapathi; 09.06.2020

Когда JS поднимает функцию, он будет знать, что нужно вернуть фактическую функцию, но когда это объявление переменной, он поднимает ее с undefined в качестве значения. И пока не будет достигнута фактическая строка назначения, она не будет иметь значения.

person DSCH    schedule 09.06.2020

Если вы хотите, чтобы console.log возвращал число, вы должны поместить объявление хостинга над возвращаемым значением следующим образом:

function scope() {
  var hosting = 12;
  return hosting;

 
}

console.log(typeof scope())

person Bar Levin    schedule 09.06.2020
comment
чувак, я знаю, - person Selva Ganapathi; 09.06.2020
comment
Я думал, что это то, о чем вы спрашивали, может быть, я не понял вашего вопроса - person Bar Levin; 09.06.2020
comment
посмотрите комментарий ниже, вот что я прошу - person Selva Ganapathi; 09.06.2020