首页 > 代码库 > js 函数中的 this 问题
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!)
js 函数中的 this 问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。