什么是变量提升?
;
eval是做什么的执⾏上下⽂;
概念⼀:
概念⼀:执⾏上下⽂
概念⼆:变量对象;
概念三 ;内存空间的概念。
执⾏上下⽂,就是当前代码的运⾏环境。JS⾥的运⾏环境包括三种,第⼀种是全局运⾏环境,第⼆种是函数运⾏环境,第三种eval。⼀个JS程序中,会产⽣多个执⾏上下⽂。
在JS中,我们可以粗浅低理解,所有的数据都放在堆内存中,但是执⾏上下⽂运⾏时,却是基于栈进⾏处理。程序运⾏时,栈底永远是全局上下⽂。然后依次是执⾏过的函数上下⽂。
执⾏上下⽂的⽣命周期有两个阶段,第⼀个是创建阶段,这时候会创建⼀个变量对象,确定this的指向。
第⼆个是代码开始执⾏的阶段。
变量对象创建的时候,会创建arguments对象。然后检查函数声明,在变量对象上以函数名创建⼀个属性,属性值指向对函数内存地址的引⽤。在检查变量的声明,再在变量对象上以变量名创建⼀个属性,属性值则为undefined。
⽽没有进⼊代码执⾏的阶段,变量对象上的属性都是不能访问的,代码执⾏之后,变量对象会变成活动对象。
所谓的变量提升,实际上就是这些。
(⽽变量对象和活动对象是⼀个对象,只不过处于执⾏上下⽂⽣命周期的不同阶段)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论