符号优先级

         符号优先级

        当多个运算符出现一个语句中 会有一个执行的顺序

        var a=(20+30)*50//优先括号

        var a=b+c*d//乘法优先

案例:

对于函数fn中有一个fm函数的情况做以下操作:

1.打印 new fn和new fn() 带参和不带参都打印function fm

2.new fn()()  双括号 返回fm中的数组并创建为新数组

3.new new fn()() 创建一个名为fm的空数组

        function fn() {
            return function fm() {
                return console.log([1, 2, 3, 4])
            }
        }
        var re = new fn
        var re = new fn() //带参与不带参都打印function fm
        console.log(re);

        var re2 = new fn()() //双括号打印fm中返回的数组
        console.log(re2);

        var re3 = new new fn()() //一个名为fm的空数组
        console.log(re3);

面试题:

由以下面试题可以看出:

1.Foo.getName    函数名.getName 不加参数指向声明的函数 Foo.getName=function

2.Foo().getName()   函数名().getName() 带了参数 指向直接函数function getName(){}

 Foo() 运行Foo函数结果为return this  =window  然后相当于window.getName()

3.new Foo.getName()   由 优先级:()>成员访问(obj.age))>new 带参 >new 无参|函数调用  

所以根据优先级:  new (Foo.getName) () ==>new 函数()  ==> Foo.getName = function (){log(2)}

4.new Foo().getName()    (new Foo())   (new Foo()).getName()

5.new new Foo().getName()     new ((new fn()).rank)()

function Foo() {
            getName = function () {
                console.log(1);
            }
            return this;
        }
        Foo.getName = function () {//把foo当对象添加成员
            console.log(2)
        }
        Foo.prototype.getName = function () {//在原型中创建方法
            console.log(3)
        }
        var getName = function () { 
            console.log(4)
        }

        function getName() {
            console.log(5)
        }
        Foo.getName();//2  点语法这里吧foo当对象看待就打印点语法添加的对象  

        getName();//4   var 声明的函数会提升函数名上去  没有声明的函数 只会提升function上去

        Foo().getName();//1  带了参数这里当函数看待 foo()=>window =>window.getName()  因为this在这里表示window   这里把window.getName改成了1

        getName();// 因为上一步window.getName改成了1 所以打印1

        new Foo.getName();//new (foo.getName) () //2

        new Foo().getName();//(new fool()).getName() | new fool()==>fool()=>this->{__proto__:foo.prototye}==>{getName:func(){log(3)}}  

        new new Foo().getName();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值