問題:為什么函數(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'}賦值給了 變量ajs會在內(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.a和c存放的是同一個函數(shù)在內(nèi)存中的地址----a、c變量中存的都只是地址
所以 obj.a()和c() 是同一個函數(shù),在不同環(huán)境中執(zhí)行
那么this就指向不同的環(huán)境
總結(jié):
所以才有,那么那么多的,函數(shù)中的this,是指向調(diào)用該函數(shù)的環(huán)境(對象),這樣一些類似的概念