function fn(a){
console.log(typeof(a);)
var a=2;
function a(){}
console.log(typeof a);
}
fn(1);
结果为function number (a=2)
分析:js里面没有块级作用域,取而代之使用了函数作用域,在函数里面所有变量不管在函数哪里声明都在整个函数里面有效,所以函数会声明提前,所以显示执行var a;
function a(){}(补充:函数声明优先于变量声明,就先先函数声明在变量声明也会是函数执行;)所以第一个打印出function,然后是对a=2赋值,所以第二个打印出number,并且a=2;
function Foo(){
getNum=function(){alert(1);}
return this;
}
Foo.getNum=function(){alert(2);}
Foo.prototype.getNum=function(){alert(3);}
var getNum=function(){alert(4);}
function getNum(){alert(5);}
Foo.getNum() 2
getNum() 4
Foo().getNum() 1
getNum() 1
new Foo.getNum() 2
new Foo().getNum() 3
new new Foo().getNum() 3