Javascript内存管理

时间:2012-12-24 09:12:37

标签: php jquery kendo-ui

我目前正在开发一个包含Kendo UI,jQuery和Symfony 1.4的项目,我有一些全局变量。

<script type="text/javascript">
  var addURL = '<?php echo url_for('dashboard/addEmployee') ?>';
  var deleteURL = '<?php echo url_for('dashboard/deleteEmployee') ?>';
  var editURL = '<?php echo url_for('dashboard/editEmplouee') ?>';
  var viewURL = '<?php echo url_for('dashboard/viewEmployees') ?>';
      ... some other URLs follow here.
</script>

我会按如下方式使用这些变量:

$.ajax({
  url: addURL,
  .. other options here
});

比方说,我有很多全局变量可能是一百,我是否需要担心“破坏”这些变量?因为我在某处读到了垃圾收集的垃圾。当我更改页面时,GC会收集这些变量吗?

最后关于kendo UI,我正在使用Kendo UI小部件窗口作为我项目中的对话框,如何在关闭后处理对话框?因为我正在重复使用从信息消息到错误消息的相同对话框。如果元素的点击处理程序结束,它是否会丢失/毁坏(超出范围)?

1 个答案:

答案 0 :(得分:2)

  

“......我是否需要担心'摧毁'这些变量?”

我不知道您是否需要担心,但无法使用var name = expression或垃圾收集(GC)手动删除使用delete定义的全局变量。

如果要以可以单独删除的方式定义字符串,则将它们定义为对象的属性。如果您想了解有关使用javascript delete的更多信息,请阅读this

如果您想确保您的字符串可供GC使用,那么在函数内定义它们,并确保函数(更准确地说,通过执行函数生成的任何“执行上下文”)不是一个或更多“封闭”范围链。通过这样做,函数(和GC)将需要做更多的工作,因此在内存和CPU负载之间需要权衡。

  

“当我更改页面时,GC会收集这些变量吗?”

与DOM一样,javascript的整个window对象(全局命名空间及其中的所有内容)在页面更改/重新加载时被销毁。我不确定GC是否会破坏它是正确的,但它是学术性的 - 它既可以是GC,也可以是非常类似的东西。

相关问题