问题:为什么函数中的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,是指向调用该函数的环境(对象),这样一些类似的概念










网友评论