javascript内存回收浅析

我对JavaScript在内存管理上有一个很大的疑问,JavaScript有预解析这一步,所以在执行前,变量可以被缓存,但方法被执行后,方法体内 的变量(无论是引用栈还是引用堆)会被废弃,并等待回收。那么是不是表示被缓存的变量被废弃,并被回收?换句话说:方法执行后,变量的引用值被释放?

并且在js中,变量若为基本类型变量,其调用都发生在栈中,所以其是被及时使用及时回收。例如:
var t = 0;
for(var i =0;i<9;i++){ //变量i在预解析阶段被赋值0,在方法执行过程中,进行累加
t = t+i; //在方法体中i值被t用来进行累加
} //方法体结束后i出栈(被废弃),t得到运算后的新值

但若方法体中存在的是一个对象,情况似乎变得复杂了很多,例如:
function sayName(){
var a ={
name:”rain”,
age:11
}//预解析时,对象被缓存起来(或者被创建?)
alert(a.name);
}//方法结束后,对象由浏览器进行处理,自动被回收

sayName();

所以很多人讲到对象被使用后,立即赋值为null,如:
function sayName(){
var a ={
name:”rain”,
age:11
}
alert(a.name);
a =null;
}
这样做实际上是把与a关联的对象废弃(并不是马上回收),且避免了经常所讲的内存泄露问题。

理想情况下,是否内存被回收后,浏览器对内存的使用反而比网页刚加载完成时更少了?