var、function、let、const变量提升

我是从这两篇文章的阅读中,做出了自己的总结,如果不明白的话可以看看这两篇文章:


变量提升情况:

  • var有变量提升,提升到当前作用域顶部并被初始化为undefined
  • 函数整个都会被提升,所以可以在函数定义之前直接调用并能正常执行
  • let、const有暂时性死区,所以提升了但是无效

变量提升概念:

  • 只提升创建(也可以叫声明或注册),不提升赋值
  • 提升时会让变量在作用域的顶层注册

js引擎在执行过程中变量的生命周期分为三个阶段:注册、初始化、赋值

var、funciton、let、const的生命周期:

var.png

var在注册阶段初始化是一起的,会被赋值为undefined,所以变量提升,打印出的是undefined


function.png

function在注册阶段初始化、执行都一起了,所以函数不管写在哪里都可以直接调用


let.png

let在注册阶段和初始化是解耦的,只是创建了但是并未初始化,所以出现了暂时性死区,打印出的是'x is not defined'

const的生命周期与let一样,只不过没有赋值阶段

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