什么是变量提升?

概念一:执行上下文

概念二:变量对象;

概念三 ;内存空间的概念。

执行上下文,就是当前代码的运行环境。JS里的运行环境包括三种,第一种是全局运行环境,第二种是函数运行环境,第三种eval。一个JS程序中,会产生多个执行上下文。

在JS中,我们可以粗浅低理解,所有的数据都放在堆内存中,但是执行上下文运行时,却是基于栈进行处理。程序运行时,栈底永远是全局上下文。然后依次是执行过的函数上下文。

执行上下文的生命周期有两个阶段,第一个是创建阶段,这时候会创建一个变量对象,确定this的指向。第二个是代码开始执行的阶段。

变量对象创建的时候,会创建arguments对象。然后检查函数声明,在变量对象上以函数名创建一个属性,属性值指向对函数内存地址的引用。在检查变量的声明,再在变量对象上以变量名创建一个属性,属性值则为undefined。

而没有进入代码执行的阶段,变量对象上的属性都是不能访问的,代码执行之后,变量对象会变成活动对象。

所谓的变量提升,实际上就是这些。

(而变量对象和活动对象是一个对象,只不过处于执行上下文生命周期的不同阶段)

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 来源:仗剑走天涯! 关于javascript的作用域的一些总结,主要参考以上文章,加上自己的整理的理解。 近日对j...
    Michael_林阅读 966评论 0 1
  • 1,javascript 基础知识 Array对象 Array对象属性 Arrray对象方法 Date对象 Dat...
    Yuann阅读 956评论 0 1
  • 暖意 从帘间溢出 轻点 蝉翼似的梦 盈盈的泪滴 落入月色的琥珀 是痴迷还是寻找 那一星 淡绿 跃入湖底 握一把草与...
    诺七岁阅读 294评论 0 0
  • 突然就明白 有些人活着只是为了自己 只是为了体验 只是为了取悦自己 这就是他们人生最大的意义 ...
    向远z阅读 174评论 0 0