JS内存泄露

JavaScript06

JS内存泄露,第1张

当内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。Chrome限制了浏览器所能使用的内存极限,64位为1.4GB,32位为1.0GB。

1.意外的全局变量

.未声明变量

.使用this创建的变量(this指向window)

解决办法:

.避免创建全局变量

.使用严格模式,在js文件头部或者函数的顶部加上use strict

2.闭包引起的内存泄露

原因:闭包可以读取函数内部的变量,然后让这些变量是始终保存在内存中。如果在使用结束后没有将局部变量清除,就可能导致内存泄露。

解决:将事件处理函数定义在外部,解除闭包,或者在定义事件处理函数的外部函数中。

3.没有清除的DOM元素引用

原因:虽然别的地方删除了,但是对象中还存在对DOM的引用。

解决办法:手动删除,赋值为null

4.被遗忘的定时器或者回调

解决办法:手动删除定时器和DOM,removeEventListener移除事件监听

1、登陆微信公众平台,点击【公众号设置】→【功能设置】→【JS接口安全域名】填写你的域名,比如 j.weiwangvip.com 。

2、设置JS接口安全域名后,公众号开发者可在该域名下调用微信开放的JS接口。

注意事项:

1、可填写三个域名,要求是一级或一级以上域名(例:weiwangvip.com,或者 j.weiwangvip.com ),需使用字母、数字及“-”的组合,不支持IP地址及端口号。

2、 填写的域名须通过ICP备案的验证。

3、一个自然月内最多可修改并保存三次。

目前主流浏览器采用的垃圾回收机制是标记清除。

标记清除:标记清除的方式需要对程序的对象进行两次扫描,第一次从根(Root)开始扫描,被根引用了的对象标记为不是垃圾,不是垃圾的对象引用的对象同样标记为不是垃圾,以此递归。所有不是垃圾的对象的引用都扫描完了之后。就进行第二次扫描,第一次扫描中没有得到标记的对象就是垃圾了,对此进行回收。

题中的json对象和json2对象在进行第二次赋值的时候,前一次赋值的对象没有了引用,自然会被垃圾回收,此处的重新赋值并不会产生内存泄露的问题