变量,作用域,内存相关的知识点(JavaScript)

1.JavaScript中数据类型包含两种不同的数据类型:基本数据类型和引用数据类型。基本数据类型指的是简单的数据段,引用数据类型之那些可能有多个值构成的对象。

2.JavaScript中基本数据类型有五种:undefined,null,Boolean,number,string。基本数据类型是按值访问的,因此可以操作保存在变量中的实际的值。引用数据类型是保存在内存中的,JavaScript不允许直接访问内存中的位置。也就是说,不能直接操作对象的内存空间,在操作对象时,实际上是在操作对象的引用,而不是实际的对象。为此,引用类型的值是按引用访问的。

3.对于基本数据类型和引用数据类型的复制不同:如果从一个变量向另一个变量复制基本数据类型的值,会在变量对象上创建一个新值,然后把值复制给新变量分配的位置上。两个变量相互之间不会相互影响。如图:


然后我们进行操作:

var num1 = 5;
var num2 = num1;
console . log(num1,num2);
num2 = 10;
console . log(num1,num2);

结果如下:


从上面我们看的出来,两个值是没有什么关系的。只是简单的复制。

4.当从一个变量复向另一个变量复制引用数据的值时,同杨也会将存储在变量对象中的值复制一份放到位新变量分配的空间中。不同的是,这个值的副本实际上是一个指针。而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一个对象。因此改变其中一个值,就会影响另一个值。


代码和结果如下:


5.执行环境和作用域:

执行环境定义了变量或者函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象。全局执行环境被认为是window对象。每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,而在函数执行后,栈将其环境弹出,把控制权返回给之前的执行环境。

当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链条的作用,就是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,就是当前执行的代码所在环境的变量对象,如果这个环境是函数,则将其活动对象作为变量对象。活动对象在最开始时只包含一个 变量,即arguments对象,作用域链中的下一个变量对象来自包含环境,而再下一个对象则来自下一个包含环境。这样,一直延续到全局执行环境。全局作用域始终是作用域中最后一个对象。

内部环境可以通过作用域访问所有的外部环境,但是外部环境不能访问内部环境中的任何变量和函数。这些环境之间的联系是线性和次序的。

6.垃圾收集和管理内存

JavaScript具有自动垃圾回收机制。机制很简单:就是找到那些不在继续使用的变量,然后释放其占有的内存,为此,垃圾回收机制会按照固定的时间间隔周期性的执行这一操作。有:标记清除和引用计数清除。其实JavaScript的垃圾回收机制和管理内存有很大的关系:为了确保占用最少的内存可以让页面获取更好的性能,一旦数据不再有用,最好通过将其值设置为null来释放其引用,这样的做法叫做解除引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值