二、JavaScript——this用法,理解

f12 打開瀏覽器控制臺

一、this 概念

當前執(zhí)行代碼的環(huán)境對象

粗暴理解:this 就是個對象

二、多種情況

(一). 全局環(huán)境中

在全局執(zhí)行環(huán)境中(在任何函數(shù)體外部)this指向[1]全局對象。

console.log(this)
// window

(二). 函數(shù)內部

(劃重點,劃重點,劃重點,劃重點,劃重點,劃重點)

1. 簡單調用

this指向window

function haha(){
  console.log(this)
}
haha()
// window

個人理解

  • haha()本身就是window對象下的一個函數(shù)
  • haha()是被window這個對象調用的
  • haha()看做window.haha()
  • 所以用2.作為對象的方法理解的話
  • 函數(shù)haha內部的this,指向調用haha的對象window

2. 作為對象的方法

  • 如果這個函數(shù)是在對象的內部,并且是作為對象的方法被調用

    那么,this指向調用這個函數(shù)的對象

var hahaObject = {
  hahaName:'l名字',
  hahaMethod:function(){
    console.log(this)
  }
}
hahaObject.hahaMethod() // hahaObject調用了hahaMethod這個函數(shù)
//{hahaName: "l名字", hahaMethod: ?}

  • 如果對象中的函數(shù)被賦值給了一個變量

    var hahaObject = {
      hahaName:'l名字',
      hahaMethod:function(){
        console.log(this)
      }
    }
    
    var a = hahaObject.hahaMethod
    
    a()
    // window
    

函數(shù)是個單獨的值,所以函數(shù)可以在不同的環(huán)境中執(zhí)行

函數(shù)hahaMethod在棧中其實存的就是指向內存的一個地址

這個內存存了

函數(shù)hahaMethod賦值給了a這個變量

a獲得函數(shù)hahaMethod的地址

a就變成了window對象下的一個函數(shù)


GitHub

:book:《web_knowledge_hierarchy》

參考文章

阮一峰——《Javascript 的 this 用法》


  1. this是個對象,對象存在里的只是一個指向內存地址 ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。