Javascript 函数声明和变量声明已挂起,哪一个先挂起?

Javascript 函数声明和变量声明已挂起,哪一个先挂起?,javascript,Javascript,我知道“函数声明和变量声明总是被JavaScript解释器无形地移动(“提升”)到其包含范围的顶部。” 但哪一个先吊起来 由于有人问我,我应该给他一个确切的答案 function test() { return foo; var foo = true; function foo(){} } console.log(typeof test()) // function 功能先被提升 实际上,这有什么区别?这有什么关系?“吊装”是一个令人困惑的概念。这样看更简单:“用var或

我知道“函数声明和变量声明总是被JavaScript解释器无形地移动(“提升”)到其包含范围的顶部。”

但哪一个先吊起来

由于有人问我,我应该给他一个确切的答案

function test() {
   return foo;
   var foo = true;
   function foo(){}

}

console.log(typeof test()) // function
功能先被提升

实际上,这有什么区别?这有什么关系?“吊装”是一个令人困惑的概念。这样看更简单:“用var或函数声明声明的变量的范围就是整个函数”。编辑:使它更复杂的事情(可能也证明了这个问题的合理性)是变量声明随赋值而移动,与变量“等价”相反。这不是提升,这并不能证明任何事情。赋值
foo=true
永远不会执行,因为函数提前返回。实际上永远不会执行赋值。这是关于提升思想的。那么,这个例子如何证明函数是“首先提升”的呢?换句话说,这如何证明顺序是
function foo(){};var foo和非
var foo;函数foo(){}
?我的答案与之不同吗?