美文网首页JavaScript 进阶营
一、JavaScript——this原理,内存的数据结构

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

作者: 陈程城 | 来源:发表于2019-08-12 10:39 被阅读3次

问题:为什么函数中的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 原理》

相关文章

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

    问题:为什么函数中的this指向调用这个函数的对象? 为什么执行的结果会有如此的差异呢 为什么obj.b()是ob...

  • JavaScript 中的深拷贝和浅拷贝

    JavaScript 内存中的堆和栈 栈(stack):堆是 JavaScript 用来存储静态数据的数据结构。静...

  • 面试相关问题

    1.常用第三库(原理及优缺) AF GPUImage SDWebimage缓存实现原理?缓存内存结构数据结构?缓存...

  • 【算法图解】Week1 选择排序

    0. 摘要 数据结构之数组和链表 排序算法 1.0 内存的工作原理 每个抽屉可以看作是一个内存单元。 内存可以看作...

  • 2019-02-15

    JavaScript 语言之所以有 this 的设计,跟内存里面的数据结构有关系。 var obj = { foo...

  • 使用JavaScript实现哈希表

    关于哈希表的原理详见我的上一篇文章简单易懂数据结构之哈希表 前言 JavaScript中是有哈希类型的数据结构的,...

  • 数据结构篇

    数据结构篇 LruCache实现原理(分为内存lru和diskLru两种实现) SparseArray与HashM...

  • 2017O(∩_∩)O

    高性能MySQL JVM内存模型相关 数据结构与算法 nowcoder redis实现原理 java_web fr...

  • Netty内存模型-PoolArena

    1 原理 应用层的内存分配最终是委托给PoolArena实现。先看下PoolArena的内部数据结构: poolA...

  • 01-JS基础语法

    一、JavaScript的概念和执行原理 JavaScript的概念和执行原理(1)JavaScript也是程序语...

网友评论

    本文标题:一、JavaScript——this原理,内存的数据结构

    本文链接:https://www.haomeiwen.com/subject/nxharctx.html