美文网首页
js 不同类型在内存中的保存方式

js 不同类型在内存中的保存方式

作者: 余带盐 | 来源:发表于2018-09-20 10:16 被阅读0次
  • 基本类型对应的变量保存的是基本类型的地址

例如number类型:var foo=5;,在内存中并不是直接保存了一个数字,而是以字典的形式保存了以下内容

{
 foo: {
   [[value]]: 5
   [[writable]]: true
   [[enumerable]]: true
   [[configurable]]: true
 }
}

所以变量foo的值并不是5,而是上面这个字典的地址,也就是基本类型也是使用的引用

  • 函数

例如

var foo=function () {}

引擎将会把function () {}函数体单独保存在内存中,再将函数体的地址赋给foo的value,如下

{
 foo: {
   [[value]]: 函数的地址
   ...
 }
}

所以foo保存了字典的地址,字典的value属性保存了函数的地址

  • 函数可以在不同的环境中执行

由于foo仅保存函数字典的地址,所以这个地址可以赋给其他任意变量,而变量又可以属于不同上下文,所以函数可以在不同上下文中执行。
而this就是确定函数所在上下文的。

引用:JavaScript 的 this 原理

相关文章

  • js 不同类型在内存中的保存方式

    基本类型对应的变量保存的是基本类型的地址 例如number类型:var foo=5;,在内存中并不是直接保存了一个...

  • 编码篇-iOS程序中的内存分配 栈区堆区全局区等相关知识

    前言 在计算机的系统中,运行的应用程序中的数据都是保存在内存中,不同类型的数据,保存的内存区域不同。内存区域大致可...

  • 值类型和引用类型

    一、值类型 在js中,number、string、boolean,都是值类型,值类型的数据直接保存在内存的栈空间 ...

  • 2018-04-16

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 一、内存分区 栈区(...

  • iOS程序中的内存分配 栈区堆区全局区

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 一、内存分区 栈区(...

  • iOS中的内存分配(栈区、堆区、全局区)

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 一、内存分区 栈区(...

  • 理解循环引用是怎么产生的

    一、 内存区域划分 在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存在不同的内存区域中...

  • 回顾iOS堆栈类型

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 一、内存分区 1.栈...

  • 内存分配分区

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 RAM & ROM ...

  • iOS程序中栈区堆区全局区的内存分配

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。一、内存分区栈区(st...

网友评论

      本文标题:js 不同类型在内存中的保存方式

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