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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM