一个异常风趣的面试题

  • 下面这道面试题是新鲜出炉,近来一次笔试的时刻碰到的,当时直接就懵逼了。

  • 然后在GitHub上征询了mqyqingfeng,非常感谢这位博主对我的耐烦解答!!

            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(); 
            new Foo.getName();
            new Foo().getName()
            new new Foo().getName();
  • 第一问Foo.getName()输出2,不诠释

  • 第二问getName()输出4,由于getName函数声明会被提早,然后被函数表达式var var getName = function(){console.log(4);}所掩盖,所以输出4。

  • 第三问Foo().getName()输出1,当函数Foo()实行完后,函数内的变量getName没有用关键字var定义,此时getName默许指向了window,相当于全局定义的getName再次被掩盖。而Foo()返回的this也是指向window,所以这一问相当于this.getName(),效果天然就是1了。

  • 第五问new Foo().getName()输出3,这一问涉及到函数运算优先级题目,详细参考这里,new和成员接见的优先级都为19,所以这一问相当于(new Foo()).getName();new一个实例后,接见的要领是prototype上的,所以效果是3

    原文作者:焚书烧肉
    原文地址: https://segmentfault.com/a/1190000009463477
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞