javascript - 一个this的问题

查看:108
本文介绍了javascript - 一个this的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看了tom大叔的深入浅出JavaScript,其中有一段关于this的有点搞不懂,他这样说:当调用表达式限定了call括号左边的引用类型的值, 尽管this被设定为null,但结果被隐式转化成global。当引用类型值的base对象是被活动对象时,这种情况就会出现。 然后给了下面这段例子:

 function foo() {
      console.log(this);//goo
      function bar() {
        console.log(this); // global
      }
      bar(); // the same as AO.bar()
    }
    var goo = {
        go:foo
    }
    goo.go();

根据我看了的理解在进入函数上下文时,这对象里面会有三个属性:1、变量对象(vo) 2、作用域链 3、this值,现在要说的就是this的值,里面说函数的this值是有调用者call给的,所以第一个log出goo没错,但在foo里面调用bar函数时为什么会是global,按照理解在执行bar()时会进入bar的上下文,而他的this值应该是调用者给的,而调用者foo的this值是goo,那为什么第二个log出来global。。。谁能解释一下这其中运作的过程!

解决方案

按照理解在执行bar()时会进入bar的上下文,而他的this值应该是调用者给的,而调用者foo的this值是goo

这句话不对,调用bar()的是foo函数,准确说就是你写的the same as AO.bar(),所以肯定不是goo。
然后文章后面不是说了:活动对象总是作为this返回,值为null——(即伪代码的AO.bar()相当于null.bar())。这里我们再次回到上面描述的例子,this设置为全局对象

这篇关于javascript - 一个this的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆