A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

总所周知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的解释器检测并判断,然后回收。但是对于全局变量,没发判断什么时候不用,所以我们应该减少全局变量的使用。


2 个回复

正序浏览

哈哈,谢谢,我看见的有点晚
回复 使用道具 举报
一个人一座城0.0 来自手机 中级黑马 2018-11-28 08:27:39
沙发
到此一游。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马