javascript语言两种变量类型及存储方式

Js代码在运行前还有一个过程:预加载,预加载的目的是:事先构造运行环境例如全局环境,函数运行环境,还有构造作用域链(函数执行的第一步不是执行函数里的第一行代码而是在上下文变量里构造一个作用域链(作用是保证执行环境里有权访问的变量和函数是有序的),同时还会构造一个this对象,this变量的值就是当前执行环境外部的上下文变量的一份拷贝),而环境和作用域的构造的核心是指定好变量属于哪个范畴,因此在js语言里变量的定义在预加载完成而非运行时期(如:赋值操作是在运行期进行的)

我们定义函数方式是通过function xxx(){}形式,那么这个函数不管定义在哪里,它都属于全局对象window,所以他们的执行环境的外部的执行上下文都是指向window


Javascript变量分为两种类型:基本数据类型和引用类型

(一)基本数据类型指:Undefined、Null、Boolean、Number和String

(undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(typeof 运算符对于 null 值会返回 "Object"。)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。)

(二)引用类型指:对象、数组、函数


在javascript里变量的存储包含三个部分:

一:栈区的变量标示符;

二:栈区变量的值或地址;

三:堆区存储的对象。


(1)基本类型理解:变量的交换,按值访问,操作的是他们实际保存的值;等于在一个新的地方按照连锁店的规范标准新开一个分店,这样新开的店与其它旧店互不相关、各自运营。

javascript语言两种变量类型及存储方式_第1张图片

基本类型store1传递给另一个变量(赋值)时,其实是分配了一块新的内存空间,因此改变store1的值对store2没有任何影响

javascript语言两种变量类型及存储方式_第2张图片



(2)引用类型理解:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;
javascript语言两种变量类型及存储方式_第3张图片

发现当复制的是对象,那么obj1和obj2两个对象被串联起来了,obj1变量里的属性被改变时候,obj2的属性也被修改。


javascript语言两种变量类型及存储方式_第4张图片





你可能感兴趣的:(前端)