请问这个闭包,造成内存泄漏了吗 var i=0function f1(){ function f2(){alert(i++)} return f2}m=f1()m()m()m()我对内存泄漏概念理解的还不是太清楚,请问这个闭包,造成内存泄漏了吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个并不会造成 stack overflow,这有篇关于闭包的文章,希望对你有帮助 http://blog.csdn.net/crystalnb/article/details/7817022 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的内存就泄漏了 楼上说的确实有道理,不过removeChild只是从文档表象上删除,并没有删除它的引用,所以会内存泄漏。但这种问题一般发生的不多,因为鉴于网页的时效性,一个网页打开的时间不会太长,所以js主要考虑的还不是内存泄漏问题。 4楼错的很厉害,remove只是从DOM树中移走,和删除无关,你照样可以调用那个div,也许麻烦一点,得用for in,可以把他搜出来,再用delete关键字删除。内存泄露指的是再也访问不到的东东未从内存中释放吧!ECMAScript很安全。 不要乱说,只要没有被其他还生存的变量持有,对象资源是会自动释放的,delete只能用来删除一个变量,和把该变量赋值为null的效果是一样的;就我那种写法,用一个全局变量持有对象,在该变量释放前,你delete该对象的其他引用一样没法释放资源 放心,根本就没有内存泄露,程序出现了四次条用函数,第一次调用把f2的引用赋值给全局变量m,这样m指向f2对象,后面出现了三次调用m,里面连循环引用都没有,只是多了个全局变量不能被回收,如果不再想在全局环境调用f2,可以令m = null; 在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就可以了这个是非常简单的一个例子,实际应用中会有很多比这复杂的多的情况,产生各种泄露 javascript mscomm发送二进制数据 Cookie 的问题。 请老师讲三行代码,谢谢。 请问怎么让这段代码运行快一些? 请教一个导航菜单高亮显示问题(急) 页面滚动显示 如何使按键没有响应 想实现基于xml的树形菜单,一定要在ie和netscape上都正常运行的 判断B日期在A日期之后,如果输入A日期在B日期之后,则提示出错信息的代码。 要将输入的内容中的符号" '译成"&apos存入数据库,使得能从数据库中读出" '不出现乱码 求助,请求高人帮忙编写一个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的内存就泄漏了
ECMAScript很安全。
不要乱说,只要没有被其他还生存的变量持有,对象资源是会自动释放的,delete只能用来删除一个变量,和把该变量赋值为null的效果是一样的;就我那种写法,用一个全局变量持有对象,在该变量释放前,你delete该对象的其他引用一样没法释放资源
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就可以了这个是非常简单的一个例子,实际应用中会有很多比这复杂的多的情况,产生各种泄露