鍍金池/ 問(wèn)答/HTML/ 函數(shù)調(diào)用this指向的問(wèn)題

函數(shù)調(diào)用this指向的問(wèn)題

   var getName;
    function getName(){
        console.log(5)
    }

    function Foo() {
        getName=function () {
            console.log(1)
        }
        return this
    }

    Foo.getName=function(){
        console.log(2)
    }

    Foo.prototype.getName=function(){
        console.log(3)
    }

    getName=function(){
        console.log(4)
    }

    Foo().getName(); // 結(jié)果為什么是1?  this指向的不是window嗎
    getName()  //  這個(gè)為什么也為1 ?  不是直接調(diào)用嗎?
回答
編輯回答
壞脾滊

Foo() 中
window.getName 被重新賦值

2017年6月25日 22:35
編輯回答
清夢(mèng)

getName為全局變量,即window.getName

Foo()因?yàn)闆](méi)有指定this,所以返回window(非嚴(yán)格模式下)沒(méi)有問(wèn)題。

Foo().getName即window.getName,此前在foo中已經(jīng)被改為 console.log(1),所以輸出1

getName()同理也輸出1

2017年3月7日 04:59
編輯回答
毀了心

主要是Foo說(shuō)一下Foo
Foo里面有個(gè)getName = function(){}對(duì)全局也就是window.getName的賦值操作導(dǎo)致覆蓋之前的值
所以調(diào)用Foo之后window.getName就被覆蓋輸出1的函數(shù)了

function Foo() {
    getName=function () {//全局變量覆蓋
        console.log(1)
    }
    return this//返回window
}
Foo().getName(); // Foo返回的是window,因?yàn)镕oo里面做了全局變量的getName賦值操作所以是輸出1
getName()  // 全局變量
2018年6月10日 01:17