浅聊JS的运行机制

445 阅读3分钟
var a = 12;
var b = a;
b = 13;
console.log(a); // =>12

var obj1 = {n:100};
var obj2 = obj1;
obj2['n'] = 200;
console.log(obj1.n); // =>200

你知道为什么 a 输出来的结果是12?而obj1.n输出来的结果是200吗?那这就得聊聊JS的运行机制了。

引用数据类型的值不能直接存储到当前的作用域下(因为可能存储的内容过于复杂),我们需要先开辟一个新的空间(理解为仓库),把内容存储到这个空间中

var obj1 = {n:100};

1)首先开辟一个新的内存空间,把对象中的键值对依次存储起来(为了保证后面可以找到这个空间,此空间有一个16进制的地址)

2)声明一个变量

3)让变量和空间地址关联在一起(把空间地址赋值给变量)

引用类型不是按照值来操作,它操作的是空间的引用地址:把原来的地址赋值给新的变量,但是原来的空间没有被克隆,还是一个空间,这样就会出现多个变量关联的是相同的空间,相互之间就会存在影响了。

JS中的值类型和引用类型的区别: 值类型的结构比较简单,会在当前作用域中开辟一个位置,把值直接存进去;值类型之间的操作都是把原来的值复制一份,然后放在一个新位置,之前的位置和新位置之间是没有关联的(总结:基本值不会让两个变量产生关联。

引用类型由于结构比较复杂,所以它是开辟一个新的空间,用来存储键值对,为了能够找到,会有一个16进制地址,变量引用数据关联是通过地址来进行关联的,共用同一个地址(总结:引用类型可能会让两个变量产生关联。

数据类型区别

1、基本数据类型按照值来操作

2、引用数据类型按照空间地址来操作