Javascript 在window.location重定向后是否调用垃圾收集器?

Javascript 在window.location重定向后是否调用垃圾收集器?,javascript,redirect,garbage-collection,Javascript,Redirect,Garbage Collection,假设我有javascript: /*getAttribute is mootools method for retrieving a named attribute*/ var companyNumber = button.getAttribute('data-company-number'); var payPoint = button.getAttribute('data-pay-point'); window.location = '/Payslip/ListPayslips/?com

假设我有javascript:

/*getAttribute is mootools method for retrieving a named attribute*/
var companyNumber = button.getAttribute('data-company-number');

var payPoint = button.getAttribute('data-pay-point');

window.location = '/Payslip/ListPayslips/?companyNumber=' + companyNumber + '&payPoint=' + payPoint

delete payPoint;//is this necessary?
delete companyNumber;//is this necessary?

是否需要删除行?它们会被调用吗?

否这不是必需的,重定向后所有变量和实例都将被删除。

是的,如果重定向加载到当前帧/文档中,则会丢失所有变量。处理这个问题的最好方法是创建几个div,任何重定向都需要加载到另一个div中。例如,您可以有一个header和main div。您的JS现在可以驻留在页面中,任何重定向都应该加载到main div中。这样您就可以保留状态

另一种方法是使用HTML5本地/会话存储

编辑:
下面是关于删除的第二个问题。不,不需要删除。其他人则给出了链接和原因。

回答第一个问题,是的。卸载时一切都是垃圾(刷新、重定向或关闭时触发卸载)

要回答第二个问题,重定向后不会命中删除。JS引擎将停在那里,并点火卸载等

关于内存管理和显式变量删除的讨论,以下是一些注意事项:

当开发在浏览器中长时间处于打开状态的大型web应用程序时,良好的内存管理可能变得非常重要,特别是当目标客户端浏览器可能较旧或在较慢的机器或移动设备上时

在这些情况下,如果您声明变量来保存临时信息,特别是大型对象,您可以选择删除这些变量以释放它们以进行垃圾收集。我的观点是,如果不需要新的声明,那么应该避免使用它们,并尽可能重用对象——但可能不会以牺牲可读性为代价;)


要添加到“Corey Ogburn”点,删除本身并不会释放内存,而是将变量与其值断开连接。这就是释放变量进行垃圾收集的原因。

重定向时,当前脚本停止执行,所有变量都变成垃圾,就像用户关闭窗口一样。显式
delete
在JS中应该很少需要。根据
delete
甚至不释放内存。它只是将变量与其值断开连接。我在javascript中从来没有见过
delete
的好用法。
delete
语句永远不会执行,因为它们在重定向之后。@coreyogurn从技术上讲,您可能希望这样做来清理闭包范围,这样它就不会保留对任何不必要的引用。这就是说,这可能是一个微观优化比任何事情,你不应该“泄漏”关闭本身的第一位。