回答
完全披露:我不知道任何特定的JavaScript引擎的内部。我从虚拟机和口译员的一般原则出发。
通常,变量名称只是指其他内存位置。因此,无论您是否删除旧变量(在超出范围时都会发生这种情况)并引入新变量,或者用新对象替换当前内容,在内存分配方面无关紧要。
垃圾收集在每个实现中可能会有所不同。即时垃圾收集很困难;我认为这样做的唯一方法就是引用计数器,即使对于循环数据结构,也很难做到这一点。因此,野外大多数垃圾收集器都会进行非即时收集循环,每次都会删除大量数据。例如,当内存使用量超过引擎内的某个阈值时,循环可能会自动运行(但通常会比这更精确)。
重复使用变量是可以的,尽管除非你用一些你所使用的变量做一些疯狂的事情(在问题中这么说),否则你可能不应该以这种方式过于宽松地重用它们。一般来说,认为良好的编码习惯是将变量声明为指向特定的事物,并且当您想要引用其他变量时使用不同的变量。
Javascript中的“变量”只是参考。它们本身并不昂贵 - 它们不占用比代码中的文本更多的空间,并且内存中的几个字节指向其他地方。如果通过将引用设置为其他内容(或空值/未定义)来重用变量名称,则GC将知道该原始引用已分离并知道可以收集该引用。
无论您使用何种浏览器或环境,GC都会根据许多因素选择实际运行收集器的时间。
JavaScript是一种松散类型的语言,可以将任何数据类型存储在任何变量(甚至是重用的)中。
但是,如果您要组合类型,则应该使用typeof关键字定期检查它们以确保它们是您认为它们的类型(例如,试图对字符串执行数学运算将会连接或断开,具体取决于关于情况)。
此外,只要JavaScript变量在范围内,它们就会一直存在。一旦范围被留下,其中的变量就会被销毁(最终 - 它是自动的和透明的)。至于重新分配的变量上的垃圾回收,只要新值被分配,旧值就会被销毁。
- 1. Javascript变量重置
- 2. javascript-重置变量
- 3. JavaScript变量变量
- 4. 使用Javascript变量
- 5. JavaScript引用变量
- 6. 使用javascript变量
- 7. JavaScript变量引用
- 8. javascript和d3.js变量作用域:变量重置函数调用外
- 9. javascript重命名“sub-local”变量
- 10. 在javascript中重置变量(jQuery)
- 11. JavaScript中的双重变量分配
- 12. 重写javascript函数局部变量
- 13. Javascript中的“变量”变量?
- 14. javascript变量为php变量
- 15. JavaScript变量为PHP变量
- 16. PHP变量为Javascript变量
- 17. Javascript变量不变
- 18. 的Javascript变量
- 19. JavaScript变量值
- 20. javascript变量?
- 21. jquery Javascript变量
- 22. JavaScript变量
- 23. Javascript undefined变量
- 24. JavaScript变量
- 25. JavaScript的变量
- 26. JavaScript的变量
- 27. 写JavaScript变量
- 28. highcharts javascript变量
- 29. Javascript - 使用sessionStorage vs变量
- 30. 用Javascript提交POST变量?
你能举一个你的意思吗? – 2011-01-10 21:53:04
@JW var a = 1; a = {z:'1'} – Ozgur 2011-01-10 21:55:11