問題:為什么函數中的this指向調用這個函數的對象?
var obj = {
a:'obj里的ccc',
b:function(){
console.log(this.a)
}
}
// 1.obj調用b函數
obj.b()
// obj里的ccc
// 2.window 調用b函數
var a = 'window下的ccc'
var c = obj.b
c()
// window下的ccc
為什么執行的結果會有如此的差異呢
為什么obj.b()
是obj
調用了函數
為什么c()
是window
調用了函數
為什么函數內的this,指向調用這個函數的對象(環境)呢
解釋:
var a = {haha:'hehe'}
一個對象
{haha:'hehe'}
賦值給了 變量a
js會在內存中,生成一個對象
{haha:'hehe'}
然后把這個對象在內存里的
地址
給到變量a
所以
a
拿到的只是一個地址
var obj = {
a: function(){}
}
同理
obj
拿到的是{a: function(){}}
對象在內存里的地址而
{a: function(){}}
對象在內存中的a
變量也只是function(){}
在內存中另外的一個地址由于函數是一個單獨的值(value)
所以函數可以在不同的環境(對象)執行
this也指向了不同的環境
所以 問題中的obj.a
和c
存放的是同一個函數在內存中的地址----a、c變量中存的都只是地址
所以 obj.a()
和c()
是同一個函數,在不同環境中執行
那么this
就指向不同的環境
總結:
所以才有,那么那么多的,函數中的this,是指向調用該函數的環境(對象),這樣一些類似的概念