一、JavaScript——this原理,内存的数据结构

问题:为什么函数中的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.ac存放的是同一个函数在内存中的地址----a、c变量中存的都只是地址

所以 obj.a()c() 是同一个函数,在不同环境中执行

那么this就指向不同的环境

总结:

所以才有,那么那么多的,函数中的this,是指向调用该函数的环境(对象),这样一些类似的概念


GitHub

《web_knowledge_hierarchy》

参考文章

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。