栈,一个存放货物或为乘客提供住宿的地方,可以扩展为仓库数据结构。Stack是一组数据的一种存储方式,特点是先进后出,后进先出。也有人通俗的讲吃吐原理,最后吞下最新的,看一下一般图形代码小casefunctionone(){functiontwo(){functionthree(){debugger;}three();}two();}one();执行上面的js,调试器可以看到最新的one()-two()-three()已经进入了,但是执行完后three()最先出栈,最后是one()的内存区栈也是一个存储数据的内存区。程序运行时,需要内存空间来存储数据。一般来说,系统会划分两种不同的内存空间:一种称为栈(stack),另一种称为堆(heap)。块堆的大小没有结构,数据可以任意存放。因此,栈的寻址速度比堆快。只要数据是本地的,并且占用一定的空间,一般都是存放在栈中,否则就放在堆中。所有对象都存储在heapfunctiontask(){vara=1;varb=2;varc={name:'zhufeng',age:10}}task();上面的情况a和b是放在栈上的,object对象c是放在堆上的。当然,因为js是一种类型语言,所以没有一定的必要区分放在栈上的概念。队列是一个操作有限的线性表。特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作称为队尾,而删除操作的末端称为队头队列因为队列只能在一端插入,在另一端删除,所以只有先进入队列的元素才能先从队列中删除,所以队列也称为先进先出线性表;还有一个流行的说法:吃拉法,吃的第一件事就是拉出来执行网文(本节重点)。当函数运行时,会创建一个执行环境。这个执行环境称为执行上下文(ExecutionContext)。将在执行上下文中创建一个称为变量的对象。对象(ValueObject),基本数据类型都存储在变量对象中。这里说明一下,执行上下文中不仅有变量对象,还有很多对象,比如:this。引用数据类型的值存放在堆中,我们通过操作对象的引用地址来操作对象代码示例functiontask(){vara=1;varb={name:'zhufei'}debuggervarc=[1,2,3];}这里可以看到a直接入栈,值为1,b和c是对象,所以对应内存地址下面的断点入栈。也可以清楚的看到,在当前的执行上下文中,存放的是varliable对象,里面只有当前函数执行中需要用到的变量,没有其他数据类型(补充面试常问)有JS中的七种基本数据类型,六种基本数据类型,BooleanNullUndefinedNumberStringSymbol,引用类型object{}[]/^$/newDate()数学作者:duffy39262链接:https://juejin.im/post/6856968460254068749来源:掘金版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。
