码迷,mamicode.com
首页 > Web开发 > 详细

js 函数中的 this 问题

时间:2014-09-21 19:44:11      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   div   sp   

昨天做了百度的前端笔试题,其中有一个问输出结果的题,感觉有点懵,平时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

 

回来一查,完全错了!

写了段代码验证一下

bubuko.com,布布扣
var a = "1";

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

tObj.tFunc();
View Code

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

注释掉一行代码:

bubuko.com,布布扣
var a = "1";
var tObj = {

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

tObj.tFunc();
View Code

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

 

js 函数中的 this 问题

标签:style   blog   http   color   io   os   ar   div   sp   

原文地址:http://www.cnblogs.com/lordrobert/p/3984746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!