摘要:
首先,看看下面一个js例子,你觉得会输出什么呢?
function fn(a){
a();
function a(){
console.log(2);
}
var a = function(){
console.log(3);
}
}
fn(function(){console.log(1)});
如果你看不出来,可以copy到浏览器中试试喔。
本人已经在IE,Firefox,360浏览器下测试过,这段代码都输出2。这时,一些人就会有疑问,为什么呢,为什么不是1和3呢,其实,是这样的:
var a = function(){console.log(3);}是预先编译好的,参数function(){console.log(1)}是在创建执行环境时创建的,而function a(){ console.log(2);}是
在运行时即时编译的,所以,参数a覆盖var a, function a()又覆盖参数a,所以最后打印2。可明白? 阅读全文