JS:笔试题3(this 作用域 隐式声明提升 原型 符号优先级)

考点:
this 作用域 隐式声明提升 原型 符号优先级
 
          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();

打印结果:

2

4

1

1

2

3

3

 

理解:(若有错,请指正)

        /*
        第一个foo.getName:打印  2

        第二个getName();函数与函数变量名相同,
        var是定义式先提升,fun是声明式;所以运行var的定义式;
        调用函数getName():打印  4

        第三个Foo().getName():先调用Foo,取成员getName,
        再调用getName:打印  1

        第四个getname(),在调用Foo()时 返回了this,指向全局;
        改变了全局变量getName 的值;再次调用getName时,
        返回的是改变了的函数;打印  1

        第五个考查了符号优先级 顺序是(new(Foo.getName)());
        先找到 Foo.getName,并创建一个新对象,再调用函数;
        打印:  2

        第六个 同上(((new Foo()).getName)());
        创建一个新对象,并调用;返回了一个函数:
            getName = function() {
                  console.log(1);
            }
            访问了一个getName成员;
            Foo.prototype.getName = function () {
                console.log(3)
            }
        F{prototype{getName = function(){console.log(3)}}}
        打印:  3

        第七个 ((new (new Foo())).getName)();
        new带参-->new无参-->访问成员getName-->调用函数
        创建一个新对象,并调用;返回了一个函数:
            getName = function() {
                  console.log(1);
            }
            创建一个新对象,在这个新创建的对象中找一个getName成员
            再调用getName函数
            打印:   3
        */

 

posted on 2022-06-22 17:08  香香鲲  阅读(52)  评论(0编辑  收藏  举报