对JavaScript异常里finally的不解?

下面是对异常的一个测试例子,可是我对里面的finally有不解之处,finally在return之前执行,可是为什么没有给str赋值为null呢?

[code="JavaScript"]
var f = (function(){
var str = "before";
try{
return str;
}
finally{
str = null;
}
})();
alert(f);//in browser show: before
[/code]

finally 里有reutrn break continue throw 时会在return 之前执行
否则在return 后执行
[code="javascript"]
var f=(function(){

var str = 'before';

var i=1//0;
while(true){
try{
return str;
}

finally{
str = null;

if(i--)continue;
}
}
})();

alert(f);
[/code]