一、JavaScript——this原理,內(nèi)存的數(shù)據(jù)結(jié)構(gòu)

問題:為什么函數(shù)中的this指向調(diào)用這個函數(shù)的對象?

var obj = {
  a:'obj里的ccc',
  b:function(){
    console.log(this.a)
  }
}

// 1.obj調(diào)用b函數(shù)
obj.b()
// obj里的ccc

// 2.window 調(diào)用b函數(shù)
var a = 'window下的ccc'
var c = obj.b  
c()
// window下的ccc

為什么執(zhí)行的結(jié)果會有如此的差異呢

為什么obj.b()obj調(diào)用了函數(shù)

為什么c()window調(diào)用了函數(shù)

為什么函數(shù)內(nèi)的this,指向調(diào)用這個函數(shù)的對象(環(huán)境)呢

解釋:

var a = {haha:'hehe'}
  • 一個對象{haha:'hehe'}賦值給了 變量a

  • js會在內(nèi)存中,生成一個對象{haha:'hehe'}

  • 然后把這個對象在內(nèi)存里的地址給到變量a

  • 所以a拿到的只是一個地址

var obj = {
  a: function(){}
}
  • 同理obj拿到的是{a: function(){}}對象在內(nèi)存里的地址

  • {a: function(){}}對象在內(nèi)存中的a變量也只是function(){}在內(nèi)存中另外的一個地址

  • 由于函數(shù)是一個單獨的值(value)

  • 所以函數(shù)可以在不同的環(huán)境(對象)執(zhí)行

  • this也指向了不同的環(huán)境


所以 問題中的obj.ac存放的是同一個函數(shù)在內(nèi)存中的地址----a、c變量中存的都只是地址

所以 obj.a()c() 是同一個函數(shù),在不同環(huán)境中執(zhí)行

那么this就指向不同的環(huán)境

總結(jié):

所以才有,那么那么多的,函數(shù)中的this,是指向調(diào)用該函數(shù)的環(huán)境(對象),這樣一些類似的概念


GitHub

《web_knowledge_hierarchy》

參考文章

阮一峰——《JavaScript 的 this 原理》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容