函数调用this指向的问题

   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(); // 结果为什么是1?  this指向的不是window吗
    getName()  //  这个为什么也为1 ?  不是直接调用吗?
阅读 2k
3 个回答

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

getName为全局变量,即window.getName

Foo()因为没有指定this,所以返回window(非严格模式下)没有问题。

Foo().getName即window.getName,此前在foo中已经被改为 console.log(1),所以输出1

getName()同理也输出1

主要是Foo说一下Foo
Foo里面有个getName = function(){}对全局也就是window.getName的赋值操作导致覆盖之前的值
所以调用Foo之后window.getName就被覆盖输出1的函数了

function Foo() {
    getName=function () {//全局变量覆盖
        console.log(1)
    }
    return this//返回window
}
Foo().getName(); // Foo返回的是window,因为Foo里面做了全局变量的getName赋值操作所以是输出1
getName()  // 全局变量
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题