热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请问这个闭包,造成内存泄漏了吗

vari0functionf1(){functionf2(){alert(i++)}returnf2}mf1()m()m()m()我对内存泄漏概念理解的

var i=0
function f1(){
  function f2(){alert(i++)}
  return f2
}
m=f1()
m()
m()
m()


我对内存泄漏概念理解的还不是太清楚,请问这个闭包,造成内存泄漏了吗

11 个解决方案

#1


这个并不会造成 stack overflow,这有篇关于闭包的文章,希望对你有帮助  http://blog.csdn.net/crystalnb/article/details/7817022

#2


这个应该不是闭包

#3


过度使用闭包确实会占用内存,不过js内存泄露还真没听说过。

#4


js是可能内存泄漏的,但你这个不会,反复操作的都是同一个全局变量

举个泄漏的例子
function addDiv(){
  var obj= document.createElement("div");
  obj.id=Math.random();
  window[obj.id]=obj;
  document.body.appendChild(obj);
  return obj;
}
function removeDiv(divObj)
{
  document.body.removeChild(divObj);
}
这两个函数,一个添加div,一个移除
按理说移除后,创建的div会自动释放,不会占用内存,
但事实是,因为有全局对象window的成员持有该div,所以不会释放内存
所以该div的内存就泄漏了

#5


楼上说的确实有道理,不过removeChild只是从文档表象上删除,并没有删除它的引用,所以会内存泄漏。但这种问题一般发生的不多,因为鉴于网页的时效性,一个网页打开的时间不会太长,所以js主要考虑的还不是内存泄漏问题。

#6


4楼错的很厉害,remove只是从DOM树中移走,和删除无关,你照样可以调用那个div,也许麻烦一点,得用for in,可以把他搜出来,再用delete关键字删除。内存泄露指的是再也访问不到的东东未从内存中释放吧!
ECMAScript很安全。

#7


你这个应该算是闭包。 但是调用的确是全局变量。到底会不会造成内存泄漏。期待高人解答!顶下!

#8


引用 6 楼  的回复:
4楼错的很厉害,remove只是从DOM树中移走,和删除无关,你照样可以调用那个div,也许麻烦一点,得用for in,可以把他搜出来,再用delete关键字删除。内存泄露指的是再也访问不到的东东未从内存中释放吧!
ECMAScript很安全。


不要乱说,只要没有被其他还生存的变量持有,对象资源是会自动释放的,delete只能用来删除一个变量,和把该变量赋值为null的效果是一样的;就我那种写法,用一个全局变量持有对象,在该变量释放前,你delete该对象的其他引用一样没法释放资源

#9


放心,根本就没有内存泄露,程序出现了四次条用函数,第一次调用把f2的引用赋值给全局变量m,这样m指向f2对象,后面出现了三次调用m,里面连循环引用都没有,只是多了个全局变量不能被回收,如果不再想在全局环境调用f2,可以令m = null;

#10


在js中所谓的内存泄露一般指的是 遗忘自己在闭包中声明的变量,长时间占用内存

这个问题貌似只有ie6会影响系统,其他浏览器关掉网页就无所谓了,所有的空间都会释放掉

一般nodejs中会比较关注内存泄露,因为服务端程序要长时间运行,内存的占用问题很关键

举个例子吧(可以试试,打开任务管理器看看内存)


function f1(){
    var a=[];
    for(var i=0;i<1000000;i++)
        a.push(i);
    return function(){alert(a[0]);};
}

var b=f1();


这段代码会造成几百M的内存占用,忘记释放就会一直占用
怎么释放呢? b=null就可以了

这个是非常简单的一个例子,实际应用中会有很多比这复杂的多的情况,产生各种泄露

#11


该回复于2012-08-20 10:47:40被版主删除

推荐阅读
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文介绍了安全性要求高的真正密码随机数生成器的概念和原理。首先解释了统计学意义上的伪随机数和真随机数的区别,以及伪随机数在密码学安全中的应用。然后讨论了真随机数的定义和产生方法,并指出了实际情况下真随机数的不可预测性和复杂性。最后介绍了随机数生成器的概念和方法。 ... [详细]
author-avatar
超_级如新公司
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有