我目前正在开发一个包含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小部件窗口作为我项目中的对话框,如何在关闭后处理对话框?因为我正在重复使用从信息消息到错误消息的相同对话框。如果元素的点击处理程序结束,它是否会丢失/毁坏(超出范围)?
答案 0 :(得分:2)
“......我是否需要担心'摧毁'这些变量?”
我不知道您是否需要担心,但无法使用var name = expression
或垃圾收集(GC)手动删除使用delete
定义的全局变量。
如果要以可以单独删除的方式定义字符串,则将它们定义为对象的属性。如果您想了解有关使用javascript delete
的更多信息,请阅读this。
如果您想确保您的字符串可供GC使用,那么在函数内定义它们,并确保函数(更准确地说,通过执行函数生成的任何“执行上下文”)不是一个或更多“封闭”范围链。通过这样做,函数(和GC)将需要做更多的工作,因此在内存和CPU负载之间需要权衡。
“当我更改页面时,GC会收集这些变量吗?”
与DOM一样,javascript的整个window
对象(全局命名空间及其中的所有内容)在页面更改/重新加载时被销毁。我不确定GC是否会破坏它是正确的,但它是学术性的 - 它既可以是GC,也可以是非常类似的东西。