为什么命名函数表达式的“ typeof”返回未定义?

时间:2019-05-22 14:22:07

标签: javascript hoisting function-declaration function-expression

我是JS的新手,所以如果听起来很蠢,请原谅我。我当时正在使用函数声明函数表达式的概念。

我有以下代码:

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

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

如果按照JavaScript中hoisting的定义进行操作,那么在我使用printSomethingprintSomeString时,由于已经声明了它们,因此它们应该可用。

typeof printSomething返回函数,但是typeof printSomeString返回未定义。为什么这样?

此命名函数表达式在使用之前是否已经声明并吊起?

命名函数表达式本身不是一个函数吗?

此外,当我致电printSomeString('Some STRING')时,它会返回以下

  

未捕获的ReferenceError:未定义printSomeString

这是怎么回事?

1 个答案:

答案 0 :(得分:1)

printSomeString不是全局变量,其局部变量为另一个函数printSomething。尝试在其中使用console.log()

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

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