堆栈
是一种数据结构,指的是数据存取的方式,当定义一个变量时,内存会开辟一段空间
栈( Stack):先进后出(FILO),在栈顶做插入(压栈)和删除操作(出栈)。
队列:先进先出(FIFO),在队头做删除操作,在队尾做插入操作。
堆和它们不同,代码执行时系统动态分配,不存在是先进后出还是先进先出。
执行环境执行栈(也称执行上下文–execution context)
当JavaScript解释器初始化执行代码时,它首先默认进入全局执行环境,从此刻开始,函数的每次调用都会创建一个新的执行环境,每一个执行环境都会创建一个新的环境对象压入栈中。
当执行流进入一个函数时,函数的环境对象就会被压入一个环境栈中(execution stack)。在函数执行完后,栈将其环境弹出,把控制权返回给之前的执行环境。
内层环境可以访问外层中的变量和函数,而外层环境不能访问内层的变量和函数
变量生命周期
全局变量的生命周期直至浏览器卸载页面才会结束。
局部变量只在函数的执行过程中存在,而在这个过程中会为局部变量在栈或堆上分配相应的空间,以存储它们的值,然后再函数中使用这些变量,直至函数结束