这是第四章基本概念,这一章涉及变量、作用域和内存问题等相关内容。
主要知识点:
- 值类型和引用类型的区别是什么?
- 如何检测数据类型?
- 3.作用域和作用域链是什么鬼?
1. 值类型和引用类型的区别是什么?
第三章讲到ESMAScript2020中有8种数据结构,其实还有一种分法两种就足够了。
这种分类的依据是操作时是自身还是数据的代理人,分为值类型和引用类型。
在 02-1 | 读JavaScript 高程 | 解释 中提到,JavaScript 的解释分为预编译和执行,而在执行的变量赋值阶段解析器需要判断变量是值类型还是引用类型。
为什么要多一道判断呢?
这是因为两种的操作方式不同,引用类型是保存在内存中的,无法直接操作就像一个代理人一样。
值类型就像是小企业的老板,想找他直接找本人就好。引用类型就像是大公司的老总,有事也不能直接冲到办公室,一般是由秘书负责代理操作。
定义时值类型和引用类型没差别,在使用的时候就不同了,你可以给引用类型添加属性和删除属性,对于引用类型是一件很简单的事情,毕竟是大公司的老总。但对于值类型,小老板没有闲钱去开展新业务,硬要添加属性会得到 undefined 的结果。
两者的另一个区别出现在赋值操作过程中,对于值类型,直接再复制一份,对于值类型,复制不过是添加了一个指针。有一个例子可以很好的理解这个东西,用过网盘的都知道,但别人分享给我们文件时,发来的是一个链接,那么此时约等于我们复制了别人的文件,这时的复制就是引用类型的复制,我们有权限访问文件,但这份文件是两者公用的,一人对该文件的操作会影响到所有人。一般得到别人的分享链接后,我们一般会执行一个操作,那就是保存到我的网盘。这种操作就是值类型的复制,每份复制的文件各自独立互不影响。
2. 如何检测数据类型?
这是一个涉及面蛮广的话题,有空写。
3.作用域和作用域链是什么鬼?
也是一个满重要的点,这一章就是简单的介绍,后面写。
第四章,完。
网友评论