2

我目前正在使用 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
});

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

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

4

1 回答 1

2

“……我需要担心‘破坏’这些变量吗?”

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

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

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

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

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

于 2012-12-24T12:29:18.830 回答