zoukankan      html  css  js  c++  java
  • js 函数中的 this 问题

    昨天做了百度的前端笔试题,其中有一个问输出结果的题,感觉有点懵,平时js是用到哪看到哪,没有研究这么深入。现在整理一下。

    题目:

    var myObject={
    foo :
    "", func : function(){ var self = this; console.log("outer func : this.foo = " + this.foo ); console.log("outer func : self.foo = " + self.foo ); (function(){ console.log("inner func : this.foo = " + this.foo ); console.log("inner func : self.foo = " + self.foo ); }()); }

    之前理解有点偏差,记得函数function也是对象,{}也是对象,所以一开始认定func这个成员方法中的this应该指的是这个函数自身,而这个函数中没有foo,所以应该是undefined。

    后来感觉不对,如果这么搞,这个题输出就全部是undefined,就没意义了。

    后来改为认定成员方法中this访问的是包含它的对象。而这个对象中没有foo,就根据作用于链向上找,就能找到外面定义的foo,值为bar。那么结果就是bar,bar,bar,undefined

    回来一查,又错了!

    写了段代码验证一下

    var a = "1";
    var tObj = {
      a : "2",
    
      tFunc : function (){
        var a = "3";
        alert(this.a)
      }
    
    }
    
    tObj.tFunc();

    弹出2,说明成员方法中的this指向的是包含它的对象!

    注释掉一行代码:

    var a = "1";
    var tObj = {
      //a : "2",
     
      tFunc : function (){
        var a = "3";
        alert(this.a)
      }
    }
    
    tObj.tFunc();

    弹出undefined,说明this对象引用的成员变量仅限于自身定义的变量,不会根据作用域链向上调用!(形成作用域链的是直接引用,而非通过this!)

    javascript中的this问题,可参考这篇文章,写的不错。

    http://blog.csdn.net/lixam/article/details/12493245

    另外还有个经典的问题:

    http://www.zhihu.com/question/21172721/answer/17413362

  • 相关阅读:
    洛谷 U138347 贩卖武器
    洛谷 U138346 统治王国
    小技巧—对树中叶子节点的记录
    洛谷 U138345 太极棋
    洛谷 U138343 炼金术士
    CF1038C Gambling
    CF1037A Packets
    如何看待神·QYB自创算法爆锤成名已久的计算机科学家Robert·Tarjan
    浅谈拓扑排序和元素间依赖性
    NOIP 2013 车站分级
  • 原文地址:https://www.cnblogs.com/lordrobert/p/3984746.html
Copyright © 2011-2022 走看看