this笔试题

这个会打印出:




js中typeof能返回几个值?

string   number  bool  undefined   function   object



现在来讨论中重点this:



例题1:

 var name="222";
        var a={
            name:"111",
            say:function(){
                console.log(this.name);
            }
        }
        var fun=a.say;
        fun();
        //这里因为fun是一个全局变量,然后它保存了a.say的内容
        //就是一个function,所以这里的this指向的是windows,
        //所以返回222
        a.say();
        //这个就是简单的返回内部的name  111
        var b={
            name:"333",
            say:function(fun)
            {
                fun();
            }
        }
        b.say(a.say);
        //因为此时传入的是a.say,也就是function,但是它直接执行了fun()
        //这样就导致了console.log(this.name)  里面的this指向windows
        //所以打印222
        b.say=a.say;
        //这个其实就是把a.say的方法拷贝到了b.say里面,因为是b调用的say,所以this指向的是b,所以打印内部的333
        b.say();

答案是:



例题 2


答案是   234

因为直接调用print()其实是this.print( ),而这里的this是windows,所以调用了foo,而里面的this改变了foo的值为234,

所以打印了234

变一下型:


答案是:111

这里会有预编译,因为this调用foo时就会先从AO(就是print的内部变量区)里面去找,找到了foo,所以this指向的是print


再变一下:


答案是:undefined

因为预编译会先把变量声明提前,然后按照顺序执行,所以在打印之前foo的值是undefined


继续变形:


答案是  123    234

因为new  print( )之后就会在print内部产生一个

这个会储存一些值,但是不是储存内部变量,就像print内部定义的var num一样,所以调用this.foo就会调用这个区域内部的变量了


 还是要讲一下this定义的值究竟去哪里了  :

function print()
        {
            var dd=1;
            var ss=55;
            this.dd=2;
            this.aa=11;
            console.log(this.dd);
        }
        new print();
        /*
        new 了以后就会产生一个
        AO{

        }
        然后定义了var两个变量就会加进去
        AD{
            dd=1;
            ss=55;
        }
        然后产生了this区域:
        AO{
            this{
                dd=2;
                aa=11;
            }
            dd=1;
            ss=55;
        }
        */



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值