堆内存的进阶理解
var result = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]
]
循环嵌套解题 题前 知识点汇总( 数组是引用数据类型,进而使用的内存形式为 堆内存 )
代码逻辑 外层for 实现 有五行数组
里层for 实现 有 i*1+1开头的对单行数组的五个顺次数的添加
----------------------------------------------------------------------------
var arr = [];
for (var i = 0; i < 5; i++) {
var temp = i * 5 + 1;
var itemArr = [];
X for (var j = temp; j < temp + 5; j++) {
Y itemArr.push(j);
}
Z arr.push(itemArr);
}
console.log(arr);
}
----------------------------------------------------------------------------
将Z行代码移动到 Y行下时 代码改编为
var arr = [];
for (var i = 0; i < 5; i++) {
var temp = i * 5 + 1;
var itemArr = [];
X for (var j = temp; j < temp + 5; j++) {
Y itemArr.push(j);
Z arr.push(itemArr);
}
}
console.log(arr);
}
问题 ??
将Z行代码移动到 Y行下时这样的 ???
Q 原本想法是 应该是{【1】} 这是错的
W {【1】【2】}
E {【1】【2】【3】}
这是对 堆储存的底层理解 但是输出是
R 在进行里层for第一次循环时 输出 0:【1】
T 在进行里层for第二次循环时 输出 0:【1】【2】
1:【1】【2】
U 在进行里层for第三次循环时 输出 0:【1】【2】【3】
1:【1】【2】【3】
2:【1】【2】【3】
为什么呢????????
这就是堆储存的特点
0: 和 1:,2:等等 指向的都是一个内存地址
在 R 行 数组输出 0:【1】 指向的内存里 也只是存了 【1】
在 T 行 数组输出 0:【1】【2】
1:【1】【2】
数组 0 和 1 指向的是同一个堆内存,
在 0——> 1 的过程中 ,
堆内存发生了变化{[1]}——>{[1],[2]}
数组0 和 1 又都指向这一个堆内存 所以有了 T 行 的执行结果
在进行里层for第二次循环时 输出 0:【1】【2】
1:【1】【2】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现