常见的Javascript报错及解决方案
2015-10-16 18:55
399 查看
一、堆栈溢出
不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,以至于覆盖了别的数据。
1、哪些操作会引起堆栈溢出?
比如递归
2、如何解决堆栈溢出?
闭包,setTimeout,优化调用。
二、内存泄漏
动态存储分配函数内存空间,在使用完毕后未释放,一直占据该内存单元,直到程序结束。指任何对象在您不再拥有或需要它之后仍然存在。
1、哪些操作会引起内存泄漏?
设置全局变量
没有及时清理的定时器或回调函数
setTimeout的第1个参数使用字符串而非函数
闭包
2、如何防止内存泄露?
不要动态绑定事件,最好采用事件代理去绑定事件;
如果动态绑定了事件,必须提供destroy方法,保证移除dom后,事件也被移除。这点可以参考Backbone的源代码,做的比较好。
组件销毁时,移除所有定时器,事件监听;
组件销毁时,移除地图的mark,tips,热力图对象。
3、如何解决内存泄漏?
JavaScript有自动垃圾回收机制,能够找出那些不再继续使用的值,然后释放其占用的内存,垃圾收集器每隔固定的时间段就执行一次释放操作。
垃圾回收有两种基本策略:标记清除和引用计数。
在局部作用域中,当函数执行完毕,局部变量也就没有存在的必要了,垃圾收集器很容易做出判断并回收。但是全局变量什么时候需要自动释放内存空间则很难判断,因此开发项目时,需要尽量避免使用全局变量。
不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,以至于覆盖了别的数据。
1、哪些操作会引起堆栈溢出?
比如递归
2、如何解决堆栈溢出?
闭包,setTimeout,优化调用。
二、内存泄漏
动态存储分配函数内存空间,在使用完毕后未释放,一直占据该内存单元,直到程序结束。指任何对象在您不再拥有或需要它之后仍然存在。
1、哪些操作会引起内存泄漏?
设置全局变量
没有及时清理的定时器或回调函数
setTimeout的第1个参数使用字符串而非函数
闭包
2、如何防止内存泄露?
不要动态绑定事件,最好采用事件代理去绑定事件;
如果动态绑定了事件,必须提供destroy方法,保证移除dom后,事件也被移除。这点可以参考Backbone的源代码,做的比较好。
组件销毁时,移除所有定时器,事件监听;
组件销毁时,移除地图的mark,tips,热力图对象。
3、如何解决内存泄漏?
JavaScript有自动垃圾回收机制,能够找出那些不再继续使用的值,然后释放其占用的内存,垃圾收集器每隔固定的时间段就执行一次释放操作。
垃圾回收有两种基本策略:标记清除和引用计数。
在局部作用域中,当函数执行完毕,局部变量也就没有存在的必要了,垃圾收集器很容易做出判断并回收。但是全局变量什么时候需要自动释放内存空间则很难判断,因此开发项目时,需要尽量避免使用全局变量。
相关文章推荐
- 百度地图JavaScript API覆盖物旋转时出现偏移
- 【前端学习】javascript面向对象编程(继承和复用)
- 原生javascript 实现瀑布流
- js转义字符串
- 将html中的代码拷贝到jsp后出现的问题 Failed to create the part's controls
- hive中导入json格式的数据(hive分区表)
- js最新手机号码、身份证正则表达式
- js 拨打电话号码的方法
- js合并数组
- 你不知道的JavaScript--Item6 var预解析与函数声明提升(hoist )
- 你不知道的JavaScript--Item6 var预解析与函数声明提升(hoist )
- 为何JS函数中使用RETURN后表单仍旧提交了
- JavaScript Array类型 小抄
- 【Miaov】JS0-热身运动
- 【前端学习】javascript函数function
- 我的Json解析实战
- 我的Json解析实战
- js原型(一)
- js时间对比的问题
- JSON和JSONP的区别及跨域访问