当页面导航离开时,Javascript会发生什么变化?

当页面导航离开时,Javascript会发生什么变化?,javascript,onunload,Javascript,Onunload,当页面导航离开时,Javascript会发生什么变化? 我正在读的一本书是关于“卸载”事件的说明 但这有什么意义呢?当网页在浏览器中移动时,不是所有的东西都会丢失和释放吗 谢谢 肖恩当然。但是你可以通过卸载来释放浏览器中的一些内存(现在不是很有用,但在过去很有用)。或者您可以在卸载时执行一些操作(例如,请求用户确认、保存内容等)。唯一有用的情况是清除在DOM和JS引擎之间具有循环引用的事件处理程序(不总是事件处理程序,但这是最常见的方式),从而导致内存泄漏。卸载页面时,所有其他内容都会被垃圾收集

当页面导航离开时,Javascript会发生什么变化? 我正在读的一本书是关于“卸载”事件的说明

但这有什么意义呢?当网页在浏览器中移动时,不是所有的东西都会丢失和释放吗

谢谢


肖恩

当然。但是你可以通过卸载来释放浏览器中的一些内存(现在不是很有用,但在过去很有用)。或者您可以在卸载时执行一些操作(例如,请求用户确认、保存内容等)。

唯一有用的情况是清除在DOM和JS引擎之间具有循环引用的事件处理程序(不总是事件处理程序,但这是最常见的方式),从而导致内存泄漏。卸载页面时,所有其他内容都会被垃圾收集

请参阅本文

通常,浏览器在页面导航后会很好地清理内存。然而,您可以做一些事情来混淆浏览器,并使其在页面转换之间保留内存。当您将数据存储在DOM元素中,或者在DOM和脚本之间有循环引用时,尤其如此

几年前,在旧浏览器中,这是一个更大的问题。当前的浏览器版本在页面转换之间的内存清理方面更好

在页面卸载期间进行一些清理可能是有意义的,但修改设计以消除循环引用更好。不要在DOM中存储数据

这里有一个更详细的例子

一个关于FireFox中JavaScript泄漏的问题


这是一个关于IE的详细信息。

这本书建议在卸载时清理哪些内容?据我所知,您无法通过任何方式卸载内容来释放浏览器中的一些内存,我希望看到一个参考文件表明并非如此。@BenjaminGruenbaum您可能无法通过使用
delete
操作符立即释放内存,您可以删除对对象的最后一个引用,以便对其进行垃圾收集。@JuanMendes delete是一个可怕的运算符,不应使用。现代浏览器从您创建的对象中提取类,这是一个巨大的性能增益,一旦删除,浏览器将无法优化。使用delete时,您将看到10倍的性能损失。@BenjaminGruenbaum如果这是您的问题,您可以将引用设置为
null
。使您的优化器和垃圾收集器碰巧设置对象引用被一些不好的做法所考虑,您应该尽可能地保持变量的局部性,请参阅