function Foo(){
getName = function(){
console.log(1);
};
return this;
}
var getName = function (){
console.log(4)
};
Foo().getName();
上面的代碼為什么輸出的是1;
foo()運行之后輸出了this,這個this是window對象,foo()中的getName是不是也就成了全局下的函數(shù)表達式;而下面的var getName也是一個函數(shù)表達式;為什么打印結(jié)果是1;
foo,執(zhí)行后它等同于于下面這個代碼么?
getName = function(){
console.log(1);
};
var getName = function (){
console.log(4)
};
getName(); //4
沒調(diào)用Foo的時候
window.getName = function(){
console.log(4);
}
調(diào)用Foo()的時候
getName = function(){
console.log(1);
};
// 相當于更改了 window.getName
調(diào)用后Foo里面的return this
的確指向window,所以最后結(jié)果是1.
Foo函數(shù)里面的getName不是用var申明的,所以是全局的,所以當Foo運行時函數(shù)里面的getName函數(shù)會覆蓋外面定義的