前几天同事发现的一个诡异现象,猜猜浏览器执行下面这段代码会弹出什么提示?
if(1){
f(1);
function f(a){
alert(a);
}
}
通常情况下,都认为javascript中function会被预解析,所以这里应该会弹出一个对话框,显示字符“1”。没错,在IE6-IE9,Chrome,Safari,Opera等待浏览器下也都是这个结果。但是偏偏Firefox有点特立独行,会提示“引用错误,f未定义”。
我们再试试,把if去掉,只留两个花括号看看:
{
f(1);
function f(a){
alert(a);
}
}
还是一样!现在我们在试试几种情况:
if(1){
function f(a){
alert(a);
}
f(1);
}
这个没有问题,正常显示1,再试试这个:
if(1){
function f(a){
alert(a);
}
}
f(1);
也没有问题,再试试这个:
if(0){
function f(a){
alert(a);
…