1...变量的复制
变量的数据类型,一共2种,一种是基本数据类型:Boolean,Number,string,null,undefined一共五个
另一种是引用类型:object
基本类型的复制
例子: var str = "你好我是str";
var copyStr = str;
结果:copyStr的值是"你好我是str",其复制在内存中实际是开辟了一个新的内存
变量 内存区间 值
str -----> 1 -----> 你好我是str
copyStr-----> 2 -----> 你好我是str
引用类型的复制
例子: var obj = new object();
obj.name = "张三"
var copyObj = obj;
结果:copyObj.name的值是"张三",但是其复制实质是是两个变量指向同一个区间,
两个变量的任何一个变量的值地改变都会影响另一个变量的值.
变量 内存区间
obj -----> 1
copyObj-----> 1
2...变量作为函数参数的传递
在绝大部分语言中参数传递有按值传递和引用传递两种
按值传递:把值进行复制后传递
引用传递:将指针直接传递给函数
在JavaScript中,函数的参数传递都是按值传递
由于引用类型的值的复制的本质是指向同一内存,因此其在函数中的变化会影响外部环境的值.
但是这并不意味着引用类型的值的作为参数传递就是引用传递,其本质依然是按值传递.
3..JavaScript的内存回收机制
定时自动回收机制
主要采用的算法:
标记清除(主流算法):变量进入执行环境,则添加标记,退出环境,重置标记.时间一到,由回收机制回收
引用计数:变量被引用,则引用次数加1,引用该变量的对象引用别的变量一次,则减1.
弊端:如果两个对象变量互相引用,则永远无法清除.
例: var obj.name = obj2.name;
var obj2.name = obj.name;
对于全局变量,为了方便回收,在每次用完以后,我们可以对其进行置空
例如: var a = full;
方便回收机制进行回收
js笔记3之变量的复制,参数传递与垃圾回收机制
最新推荐文章于 2023-04-28 21:27:36 发布