前端面试经典js题目Foo 与 getName

   

    面试时遇到了2次该题,结果两次都没有看懂,感觉自己的js功底太差了,跟没学过一样。这道题很经典,网上查了一下,记录一下大佬的思路和自己的理解

题目:

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

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

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

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

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

//输出下列结果

Foo.getName();

getName();

Foo().getName();

getName();

new Foo.getName();

new Foo().getName();

new new Foo().getName();

Foo.getName()   =>   2

Foo.getName()就是单纯的表示 输出函数 Foo的静态方法,所以直接输出2

getName()  =>  4

getName()因为提前声明的原因, 声明后被  var getNmae() = xxx 所覆盖  所以这里的输出 变成 4

Foo().getName()  => 1

Foo()里的return this 是window,而window。getName 在Foo里被覆盖,所以输出为 1

getName()  => 1

而这里getName() 在 Foo().getName() 之后,原window里的getName被覆盖,所以输出同上 为 1

new Foo.getName()

new Foo().getName()

new new Foo().getName()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值