这是我参与「第四届青训营 」笔记创作活动的第3天
前言
由于JS涉及到的知识和概念较多,有一部分经常会混淆和忽略,特此进行记录和整理,包括内存泄漏、数据类型和关键字等内容。
1.内存泄露
定义:内存泄漏是指在编写js的过程中,被分配内存地址的对象长时间没有被释放而造成长期的内存占用,结果是运行应用程序响应变慢乃至最终崩溃的过程。
内存泄露的主要原因包括缓存、闭包、回调、定时器、DOM元素的引用太多且未在使用后释放,以及在未被注意的情况下定义过多的全局变量。
自动垃圾回收机制:浏览器的javascript拥有垃圾回收机制,垃圾收集器会周期性找出不再使用的变量并释放内存。
2.JS的八种数据类型
数据类型包括两类:值类型(基本对象类型)和引用类型(复杂对象类型)
值类型
(1)数字类型 - Number
(2)字符串类型 - String
(3)布尔类型 - Boolean
(4)符号类型 - Symbol
(5)未定义类型 - Undefined
(6)空类型 - Null
引用类型
(7)对象类型 - Object
(8)函数类型 - Function
用typeof和instanceof能够返回数据类型,但是typeof不能区分Object、Array和Null,返回值均为Object,而instanceof不能区分Number、Boolean和String等基本数据类型
3. var/let/const关键字
var、let 和 const 均为 JavaScript 中用来声明变量的关键字,但是 let 和 const 关键字是在 ES6 中新增的。
var
(1) var存在变量提升,可以先调用后声明;
(2)允许多次声明,后面的可以覆盖前面的声明;
(3)在函数内部用var声明变量则是局部变量,如果不使用var则是全局变量。
let
(1)存在暂时性死区:在let声明变量前不能使用;存在暂时性死区:在let声明变量前不能使用;
(2)let的作用域是块级作用域{};
(3)在相同作用域内不能用let重复声明,但在不同作用域则可以{}.
const
(1)const在声明时必须进行初始化 const x=1;
(2)const声明的变量为只读变量,不可修改;
(3)存在暂时性死区:在const声明变量前不能使用;
(4)var的作用域是块级作用域{},在块级作用域内不能重复声明;
(5)变量指向的内存地址所保存的数据不得改动.