我也不知道的js - let/var提升原理(var/let hoisting)

以前不怎么认真读js的MDN文档,后来看到了一位大佬对var/let/const 变量提升做了详细解释之后 有所顿悟,但是还有不明白的地方,自此记录下来,以免忘记

由于篇幅太长,我就不自己打一遍了,看看大佬的原文吧:我用了两个月的时间才理解 let

我的疑问

在大佬的文章里有这两段代码

代码1:
var foo
function foo(){}
console.log(foo)

代码2:
function foo(){}
var foo
console.log(foo)

问输出的是什么,你要是看了原文,你会发现大佬的这句话

答案:由于 function 比 var 多一个「赋值」过程,所以两个代码的输出都是函数。你也可以记住结论:function 比 var 牛逼。

但是我觉得大佬也没研究透,我想了想,也没研究透,仅仅做了几个设想

js的变量提升是有优先级的,var 的优先级比function的优先级高,也就是说无论你把var foo放哪里,都是先创建、初始化变量foo,然后再创建、初始化、赋值function foo,这样解释的话可以对代码1进行分解:a. 先创建变量a,然后初始化未undefined。 b.再创建function的变量、初始化、同时赋值未function(){}。c. 执行到var foo的时候 没有赋值,所以不做改动。 最终输出foo就是foo这个方法了
根据刚刚的,然后对 代码2 进行解析。解析步骤你会发现是一样的,最终你那个输出的都是foo的function。猜想和结论是一样的

结论: js引擎在执行代码的时候,从上到下

创建执行环境(执行域,各种叫法不一)
寻找有没有var的变量,进行提升(创建、初始化为undefined)
寻找有没有function的声明,进行提升(创建、初始化undefined,赋值)(这里我也不知道function还用不用初始化为undefined,因为还得赋值,有点多此一举,这可能只有js引擎开发的团队才知道了)
let跟var也是一样的,也会提升,仅仅创建,不做初始化

另一个猜想,就是大佬说的,function比var牛逼,但是我觉得,哈哈,不说了
欢迎大佬们指出帮助解惑

全部评论

相关推荐

我看到好多人都在说0offer好焦虑,结果一看是投了百度快手字节啥的。好像大家都是只想通过校招进大厂,对小公司是不考虑的吗😂可是能进大厂的难道不是只有少部分人吗,真心发问
梦想是成为七海千秋:沉默的大多数吧,喜欢晒的都是能引起共鸣的大厂,找小厂的人,别人也不认识你这个小厂,就自己偷偷找了实际上大多数人哪有什么机会能找到大厂
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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