js中的内存溢出与内存泄漏

迈不过友情╰ 2022-12-04 01:29 190阅读 0赞

闭包的缺点及解决方法
1.缺点:函数执行完毕后,函数内的局部变量没有释放,占用内存时间长,容易造成内存泄漏。
2.解决方法:及时释放(让内部函数成为垃圾对象–》回收闭包),不使用闭包。
内存溢出:程序运行出现的一种错误,当程序运行超过需要的内存超过了剩余的内存,就出现内存溢出的错误。
内存泄漏:占用的内存没有及时释放,内存泄漏太多就容易导致内存溢出
常见的内存泄漏有:意外的全局变量(定义变量忘记写var),没有及时清理的计时器或回调函数,闭包。

  1. //两个例题
  2. var name = "Window";
  3. var Object = {
  4. name:'My OBJ',
  5. getName:function(){
  6. return function(){
  7. return this.name
  8. };
  9. }
  10. };
  11. alert(Object .getName()());/Window,现在的this指向window,因为是window调用的最终方法,没有闭包,内部函数没有引用外部函数变量
  12. var name2 = "Window";
  13. var Object = {
  14. name:'My OBJ',
  15. getName:function(){
  16. var that = this;
  17. return function(){
  18. return that.name2;
  19. };
  20. }
  21. };
  22. alert(Object .getName()());/My OBJ,现在的that指向Object,有闭包,内部函数引用了外部函数变量
  23. function fun(n,o){
  24. console.log(o);
  25. return {
  26. fun:function(m){
  27. return fun(m,n);
  28. }
  29. };
  30. }
  31. var a=fun(0);//返回函数对象undefined
  32. a.fun(1);//0 ,返回对象但是没有接收,有闭包但马上又消失了
  33. a.fun(2);//0
  34. a.fun(3);// 0
  35. var b=fun(0).fun(1).fun(2).fun(3);//undefined 0 1 2(一直有接收,所以一直有闭包)
  36. var c=fun(0).fun(1);//undefined 0,此时n为1,
  37. c.fun(2);//1,没有接受,所以只剩第一次的,n一直为1
  38. c.fun(3);//1

发表评论

表情:
评论列表 (有 0 条评论,190人围观)

还没有评论,来说两句吧...

相关阅读