变量提升的时候只会提升声明,不会赋值.....函数的定义会覆盖变量的声明....
第一部分,预编译时foo为console.log(2)的函数,接下来foo被赋值为console.log(1)的函数;
第二部分,跟第一部分一样....不过函数预编译之后,再代码执行阶段就不考虑函数覆盖变量了