js变量提升问题

function foo(){  
 console.log(2) }
var foo = function(){    console.log(1) } foo();//1
上面的输出和下面的输出是一样的我想知道原理····有大佬解释一下吗。
var foo = function(){   
console.log(1) 
} function foo(){
   console.log(2) 
}
foo();//1

全部评论
函数表达式:var foo=function(){} 函数声明方式:function foo(){} 只有函数声明形式才能被提升。 所以图1没变,第二个“覆盖”了第一个方法; 图2顺序改变,然后也是“覆盖”,所以输出1
点赞 回复 分享
发布于 2018-10-14 22:39
感谢帮我解答···
点赞 回复 分享
发布于 2018-10-14 22:43
还是不太明白为啥后面声明的没有覆盖前面声明的···
点赞 回复 分享
发布于 2018-10-14 22:37
变量提升的时候只会提升声明,不会赋值.....函数的定义会覆盖变量的声明.... 第一部分,预编译时foo为console.log(2)的函数,接下来foo被赋值为console.log(1)的函数; 第二部分,跟第一部分一样....不过函数预编译之后,再代码执行阶段就不考虑函数覆盖变量了
点赞 回复 分享
发布于 2018-10-14 22:34
好像是这样。。。声明式函数会提前到最前面,所以第二个例子代码执行的顺序和第一个是一样的。 不知道这样解释对不对。
点赞 回复 分享
发布于 2018-10-14 22:32

相关推荐

07-16 18:03
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务