Что происходит во время подъема? - PullRequest
1 голос
/ 21 апреля 2019

Я проходил через концепцию подъема javascript.

    var a = 2;
    function a(){};
    typeof a 
    // "number"

    var a ;
    function a(){};
    typeof a 
    // "function"

У меня вопрос: почему в первом коде вместо функции есть номер типа, который можно увидеть во второй части кода?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2019

объявления функций поднимаются в первую очередь, чем обычная инициализация переменной.
Переменные, объявленные с var, показывают подъем.Объявление a идет в верхнюю часть области видимости, но ему присваивается значение 2 в строке, в которой оно написано.

Объявление функции, т. Е. function a(){};, объявляет значение, а также присваивает значение функции вверхняя часть объема.Итак, что происходит в первом примере:

var a = function(){};
a = 2;
console.log(typeof a) 

Во втором примере переменная инициализируется функцией.Но var a не меняет a с функции на undefined

var a = function(){};
a; //this doesnot change a
console.log(typeof a);
2 голосов
/ 21 апреля 2019

Если вы сломаете первый код, он будет выглядеть следующим образом. В js объявления функций поднимают определения функций.

Чтобы показать объявления функций, поднимите определения функций, которые вы можете вызвать функцией a() до объявления

var a; // a is undefined
a();

function a() {
  console.log('function a');
}; // function is also hoisted
a = 2; // a is assigned a value
console.log(typeof a)
...