Почему typeof именованного функционального выражения возвращает значение undefined?

Я новичок в JS, поэтому, пожалуйста, простите меня, если это звучит глупо. Я играл с концепциями объявления функции и выражения функции.

У меня есть следующий код:

var printSomething = function printSomeString(string) {
  console.log(string);
}

console.log(typeof printSomething); // function
console.log(typeof printSomeString); // undefined

Если я буду следовать определению hoisting в JavaScript, к тому времени, когда я использую printSomething и printSomeString, они должны быть доступны, так как их объявления были подняты.

typeof printSomething возвращает функцию, но typeof printSomeString возвращает значение undefined. Почему так?

Разве это именованное функциональное выражение уже не объявлено и не поднято перед использованием?

Разве само выражение именованной функции не является функцией?

Кроме того, когда я вызываю printSomeString('Some STRING'), он возвращает следующее

Uncaught ReferenceError: printSomeString не определен

Что здесь происходит?


person Auro    schedule 22.05.2019    source источник
comment
printSomeString существует только в своей области, если можно: jsfiddle.net/vqL2814y   -  person Kaiido    schedule 22.05.2019


Ответы (1)


printSomeString - это не глобальная переменная, а локальная переменная другой функции printSomething. Попробуйте использовать console.log() внутри него.

var printSomething = function printSomeString(string) {
  console.log(typeof printSomeString)
}

console.log(typeof printSomething); // function
printSomething()

person Maheer Ali    schedule 22.05.2019