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

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
彧未sr:查看图片
投递牧原集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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