总所周知HTML(网页的骨架),CSS(网页的样式)与JS并称为前端三老铁,其中JS被称作前端的灵魂,这就带大家了解JavaScript最底层的原理,希望看完本篇,你能够对对JavaScript有更深的了解!
JS全称JavaScript,是属于在浏览器端运行的一种客户端的脚本语言。其实,简单来讲JS就是用来操作DOM树,改变它的结构或属性。在客户端的一些页面效果可以使用JS来实现,不需要服务器的响应,如果每个标签等切换都需要与服务器交互的话,服务器的负荷会很大。或者页面在进行某些操作后,需要与服务器交互取得新数据,然后在页面上有较小的变化,如果与服务器交互渲染整个页面的话会很慢,这时使用JavaScript的优势就很明显不过了,所以JS也变得越来越不可或缺!
JS的数据在内存中主要分成两大类堆,栈
栈:原始数据类型(Undefined,Null,Boolean,Number、String)
堆:引用数据类型(对象、数组和函数)
在某些场景下,我们需要借助堆栈数据结构来处理一些问题,所以下面我们要对这两个数据结构进行区别。
区别:
两种类型的存储位置不同;
简单数据类型直接存储在栈中,占据的空间小,主要定义变量(变量的存储地址),Undefined,Null,Boolean,Number,String,例如它们是按值访问的。;
复杂数据类型存储在堆中的对象,占据的空间大,如果存储在栈中,会影响程序的运行性能;JavaScript是不能直接访问堆内存中的数据,所以如果我们要访问复杂数据类型时,采用的是引用访问,其实就是复杂数据类型在栈中存储了指针,该指针指向堆中该类型的地址。
内存泄漏
很多人都知道,JS有垃圾回收机制,内存就可以不管了,在编程过程中会在全局作用域下定义很多变量,以为JS会自动回收,其实不然,这些不再用到的内存没有及时释放,就会产生内存泄漏的问题。
关于垃圾回收机制:引自《JavaScript权威指南(第四版)》 由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。 这段话解释了为什么需要系统垃圾回收。JavaScript的解释器检测到何时程序不再使用一个对象了,当他确定了一个对象是无用的时候,它就会把这个对象所占用的内存释放掉。 在局部作用域的时候,如果函数执行完毕变量就没有存在的必要,这是JavaScript的解释器检测并判断,然后回收。但是对于全局变量,没发判断什么时候不用,所以我们应该减少全局变量的使用。
|