JavaScript变量提升

js'一段'代码执行前,需要先编译,编译后会生成两部分内容:执行上下文和可执行代码:
执行上下文:比如调用一个函数,就会进入该函数的执行上下文,确定该函数执行期间用到的this, 变量,对象,函数等。执行上下文中存在变量环境对象。该对象保存了变量提升的内容。

image.png
showName()
console.log(myname)
var myname = '变量环境'
function showName() { 
  console.log('函数showName被执行');
}

分析上面代码变量环境怎么生成的:
1.第一行和二行代码不是声明操作,JavaScript引擎不做任何处理。
2.第三行,由于是var声明,JavaScript引擎会在变量环境对象添加一个myname属性,并用undefined初始化。
3.第四行Javascript发现通过function定义的函数,所以他将函数定义存储在堆中,并在变量环境对象中创建一个showName的属性,并将改属性值指向函数在堆中的位置
这样就生成了变量环境对象,现在有了执行上下文和可执行代码,就到执行阶段了
执行阶段,按顺序一行一行执行
当执行到调用showName函数时,JavaScript引擎会去变量环境查找showName,由于环境变量中存在改函数的引用,所以JavaScript开始执行。
接下来打印myname,JavaScript引擎继续在变量环境查找myname,找到了,打印出来undefined。
执行第三行把 '变量环境' 赋值给myname,赋值后变量环境myname的值变成 '变量环境'
以上就是一段代码的编译和执行流程

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。