JavaScript 引用

发布于 2022-09-13 00:23:08 字数 375 浏览 18 评论 0

image.png
这个代码中 {视:[视频]} 数组保存的是对 视频 字符串的引用吗?

如果是引用的话

那是不是可以说下面的代码 kk1 内存占用的小
image.png
由于上面是基本数据类型,所以是值复制

更新:

那引用数据类型呢
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

偏爱自由 2022-09-20 00:23:08

原则

JS 基本类型内存直接开辟在Stack
JS 引用类型内存开辟在Heap中,然后Stack存储对Heap的引用
array 和 object 都是引用类型

首先对题主第一个问题:

JS基本类型(undefined,null,number,boolean,string)是直接分配Stack内存的,不存在引用。
比如

var a = 'a'
var b = [a]
// 等同于下面操作,内存的分配没什么区别:
var a = 'a'
var b = ['a']

对题主第二个问题

js的array很特殊,和其他大部分语言不太语言。JSArray 是继承自 JSObject,你可以把看做是下标是 \(0,1,2,3,...\) 的 object

var 视频 = ['视频']
var k = {视: 视频, a: 视频}
var k1 = {a: '视频', b: '视频'}

这段代码

  1. var 视频 = ['视频'] 这句,内存 heap 中开辟地址放 ['视频'], 然后 stack中放入引用地址 视频 指向刚才的 heap
  2. var k = {视: 视频, a: 视频} 这句,首先heap中开辟地址放新的 object ,下标 a 都指向第一句 heap 中的地址,然后Stack k 指向这个 object
  3. var k1 = {a: '视频', b: '视频'} 这句,首先heap中开辟地址放新的 object,里面包含两个基本类型的属性a 和 b, 不存在引用,然后Stack k 指向这个 object

所以,第二个问题内存开辟是不一样的。如果硬要说谁多谁少,k = {视: 视频, a: 视频} 这句话少一点

另外有人对js array 内存分配做了源码层级的分析,建议看看:
深入理解 JS 数组 —— JS的Array在内存上分配的空间是连续的吗?

被你宠の有点坏 2022-09-20 00:23:08

基本类型赋值即拷贝,所以不是引用。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文