JavaScript 爲什麼要讓that=this

分享一個我的公衆號,最近突然想玩小程序,之前做過一段時間前端開發,考慮到現在應用程序越來越多,未來社會一定是一個充滿“只有你想不到,沒有你做不到”的App的世界!而微信小程序又給我們這羣喜愛開發的童鞋們提供了友好的入門機會,因此,不如就在當下,開始一步一步的學習並開發自己的小程序吧。這是我的公衆號:目的是和大家討論小程序開發,同時也帶着開發小白入門設計開發微信小程序,來吧,加入!

正文:

 在寫JavaScript時經常看到函數內用到var that = this 這樣一句話,可能有讀者就會疑問,難道直接用this不行嗎?

 要解釋這個問題,首先你需要明白this的作用。

 簡單來說,this關鍵字指向當前函數所在的對象,多讀幾遍這句話,記下來,下面我們舉例解釋下:

// 首先定義一個全局的width
var width = 600;
// 再定義一個shape對象,然後在shape對象裏邊單獨定義一個width局部的屬性(也可以成爲變量吧)
var shape = {
    width: 300
  };
// 最後再定義一個函數,我們在函數內部使用了this
var showWidth = function(){
    document.write( this.width ) 
    // 這個this指的就是當前函數(也就是showWidth)所在的對象(也就是最外層的對象window)中的width方法
}
showWidth();

這裏解釋下document:        

       說到document就不得不提window對象,在JavaScript中,你可以把window對象直接理解成最頂層的對象。也就是你創建一個JavaScript文件,準備寫代碼,你在最外層定義的各種全局變量都默認屬於window對象。

        document其實就是window對象的一個函數,這個函數主管網頁的頁面顯示,它有多種方法,例如上邊的write方法,可以向頁面寫入內容。

        其實還是那句話,記住this關鍵字指向當前函數所在的對象這句話,慢慢寫寫JavaScript體會一下就能理解啦。

        知道了this的作用,我們再來說說爲什麼讓that = this。因爲在我們寫JavaScript時,不可避免的會出現一個函數嵌套於另一個函數之中的情況,當你需要在嵌套函數中使用全局this對象時,如果你直接使用this,那這個this將指向當前函數所在的對象(也就是外邊一層函數),因此並不能指向最外層的全局對象​。這時如果你在第一層函數中就讓that=this,也就是說把最外層的全局變量存到了this中,那麼不論你在第幾層函數中調用最外層對象,你只需要使用that就可以啦​。​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章