要了解数组和函数在内存中如何存储的,首先的了解数组与函数属于什么数据类型

JavaScript数据类型

  • 基本数据类型:Number、String、Boolean、Undefined、Null,
  • 引用数据类型:Object、Array、Function

其次得了解数据结构

数据结构

  • 名词解释:在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。
  • 常见的数据结构:堆栈,队列,数组,链表,树,图,堆积,散列表

基本数据类型

  • 基本数据类型:基本数据类型保存在栈中,这些类型在内存中别占有固定大小,他们的值保存在栈空间,按值访问。变量在声明过程中,会在栈中开辟一段内存空间,变量值直接存在该内存中,变量读写的是它们实际保存的值。基本数据类型数据复制时,会为新声明的变量开辟一段新空间, 然后把值复制到为新变量分配的空间中,在当前执行环境结束时销毁。

引用数据类型

  • 引用数据类型:引用数据类型是不固定大小的数据,但是存放他们的地址大小是固定的,所以把地址保存在栈中,值保存在堆中。引用数据类型是一个指针,指针保存在栈中,但是指针指向的是堆。即存储引用数据类型的变量保存在栈中,数据本身保存在堆中。读取其数据时,先访问栈中的地址,通过地址找到存在堆中的数据。
  • 引用数据类型进行浅拷贝时,复制的是引用地址。
  • 由于浅拷贝指向的是同一个地址,所以当object2和arr2的值改变时,object1和arr1的值也随之改变。
  • 与浅拷贝对应的是深拷贝,深拷贝是将引用类型的值全部拷贝一份,并且存放在不同的内存中,形成一个新的引用类型,修改它的值不会影响原来的值。
  • 引用数据类型不会随着当前执行环境结束而销毁,只有存放变量的地址不存在时,内存才会被垃圾回收机制回收。
  • 但是这里有一个特殊的地方,就是null,null类型虽然是基本数据类型,但实际是一个特殊的对象,存放null的变量在栈中,指针指向堆中的一段空内存。

回归本题

  • 数组和函数也是保存在栈中,这些类型在内存中别占有固定大小,他们的值保存在栈空间,按值访问。变量在声明过程中,会在栈中开辟一段内存空间,变量值直接存在该内存中,变量读写的是它们实际保存的值。基本数据类型数据复制时,会为新声明的变量开辟一段新空间,
    然后把值复制到为新变量分配的空间中,在当前执行环境结束时销毁。

JS每日一题: JavaScript中的数组和函数在内存分别是如何存储的?相关推荐

  1. JS每日一题:vue中keepalive怎么理解?

    20190212问 vue中keepalive怎么理解? 说在前面: keep-alive是vue源码中实现的一个组件, 感兴趣的可以研究源码 https://github.com/vuejs/vue ...

  2. JS每日一题:Vue中的diff算法?

    20190125 Vue中的diff算法? 概念: diff算法是一种优化手段,将前后两个模块进行差异对比,修补(更新)差异的过程叫做patch(打补丁) 为什么vue,react这些框架中都会有di ...

  3. JavaScript中的数组、函数中的方法、arguments

    毫无疑问,数组意识一个对象,拥有普通对象的所有功能,存储的性能比普通对象好 区别:普通对象使用字符串作为属性名,数组使用索引来操作元素 一.创建对象 1.使用构造函数创建数组 var a =new A ...

  4. JS每日一题:new Vue()中发生了什么?

    20190214问 new Vue()中发生了什么? 先从语法上分析,new关键字在js语言中代表实例化一个对象, 而Vue实际上是一个类, 我们简单看一下源码 源码地址 https://github ...

  5. JS JavaScript中去除数组中重复元素的方法

    JS JavaScript中去除数组中重复元素的方法 感觉比较好理解的3种方法,总结一下,大家共同学习 方法一: Array.prototype.method1 = function(){ var a ...

  6. 遍历JavaScript中的数组

    在Java中,可以使用for循环遍历数组中的对象,如下所示: String[] myStringArray = {"Hello", "World"}; for ...

  7. JS每日一题: 小程序页面之间如何通信?

    20190227 小程序页面之间如何通信? 首先将通信的模型列举出来, 分为以下几种 兄弟页面间通信 父路径页面向子路径页面通信 子路径页面向父路径页面通信 通信的方式 localStorage 本地 ...

  8. JavaScript中的数组创建

    JavaScript中的数组创建 本文转载自:众成翻译 译者:loveky 链接:http://www.zcfy.cc/article/713 原文:http://rainsoft.io/power- ...

  9. 遍历 in java_[Java教程]JavaScript中遍历数组 最好不要使用 for in 遍历

    [Java教程]JavaScript中遍历数组 最好不要使用 for in 遍历 0 2017-01-14 00:01:52 先看一段代码1 2 3 4 5 Document 6 7 8 9 21 2 ...

最新文章

  1. 三维人脸识别研究进展综述(附pdf)
  2. Linux下CMake简明教程(10) 定义宏来控制打印的信息
  3. 计算机组成原理的基础知识,计算机组成原理:基础知识部分习题解答(学习笔记)...
  4. shell打开wifi命令_远程执行命令的填坑记录
  5. 你真的懂线程同步么?
  6. .vue文件在webstorm中es6语法报错解决方法
  7. python语言检测模块langid、langdetect使用
  8. python爬虫和Java爬虫哪个更好
  9. Tomcat日志总结
  10. VS Code 基础入门使用(配置)教程
  11. 极狐GitLab Helm Registry 使用指南
  12. Win10 VC++运行库集合|VC++ 2005 2008 2010 2012 2015
  13. 两个进程共享内存,一个写,一个读
  14. html怎么调颜色的饱和度,css – LESS:色调,饱和度和亮度 – 如何使用?
  15. Centos7.4安装与下载
  16. Compact PCI总线知识整理
  17. 未能创建类型“Genersoft.ZJGL_XD.XDXTXY.XDGLPUBSrv”。
  18. http://blossomsandaccents.com/mk.html 57568
  19. Win10更新导致无法使用局域网共享打印机最佳解决方案
  20. javaScript移动端相册

热门文章

  1. 设计发红包的API ( 微信红包的算法是怎样的?)
  2. pushd popd命令
  3. Android内存压力测试工具(memtester移植)
  4. php发起options请求_如何避免options请求?
  5. js回调函数(函数嵌套)
  6. 转发:stm32 移植 freertos
  7. 黑苹果攒机、安装和问题记录
  8. js递归循环数组(tree结构数据)
  9. 【学术篇】oj.jzxx.net2701 无根树
  10. python 列表元素倒数第一,第二个访问方法