纯属小白见解 正在学习js中,不知道说的对错 只是想纪录现在学习时的想法和知识!
数据是存储中代表特定信息的东西
变量 每个变量都对应着一块小内存 变量名就是一个内存的标识 变量名用来查找对应的内存,变量的值就是内存中保存的数据 变量保存的是这个值,这个值 可以是地址值 也可以是基本值
内存 每一个小内存中有2个数据 内部存储的数据 地址值
内存分类 栈 :用来存放全局变量和局部变量
堆:用来存放对象
赋值操作 var a = XXX;
如果xxx是基本数据 a保存的就是这个数据
如果xxx是对象 a保存的就是这个对象的地址值
如果xxx是一个变量 a保存的就是xxx的内存内容(可以是基本数据,可以是地址值)
引用变量赋值问题
2个引用变量指向同一个对象,如果通过一个变量修改对象内部的数据 另外一个变量看到的也是修改后的数据 这两个变量指向的对象一样 地址一样 所以不论那个变量 进行对象内部的数据更改 另外一个看到的也是更改后的对象
2个引用变量指向同一个对象,让其中一个变量指向另一个对象,说明现在这两个变量已经不是同一个地址值了 一个变量还是指向原来的对象 另外一个更改了地址了指向了新的对象
一切皆为数据
1.js引擎管理内存
1.内存的生命周期 首先分配内存空间 有一个内存的地址 得到被分配空间的使用权 存储数据 可以反复进行操作
2.释放内存 局部变量 在函数执行完毕后自动释放
局部变量的指向的对象:称为垃圾对象,等着被浏览器回收器进行回收
内存中 操作的目标:数据
可进行 算术运算 逻辑运算 赋值 运行函数
运行函数时 可以将函数名和调用的括号分开看待 将函数名看作值 调用的括号当作运算符
js调用时传递变量参数时,是值传递还是引用传递?
1.都是值传递 这里的值 可以为基本值 也可以是地址值
2.可能是值传递 也可能引用传递(地址值);引用的是地址地址地址
个人理解 栈内存和堆内存 之前看js基础的时候 那个老师有过一点点的讲解 现在看的js高级 发现自己把栈和堆想的太简单了 原来的理解就是 js的变量都是保存到栈内存中的 这个变量的值 在堆内存中 有一个内存空间地址 这个变量能够通过这个地址获取这个值。
新学习的栈和堆 让我知道 不论是全局变量还是局部变量 都是在栈内存中存在,有的变量直接是数据值而有的为对象地址值 为函数对象地址值,内存中各种操作的都是数据,情况不同 对象指向的地址就不同,要注意函数内对象的=与: 的区别 =号是创建一个对象,:是给这个对象赋值属性,如果前者进入执行 就肯定会改变指向的地址 后者 会添加或者改变地址中存储的属性值。