课程介绍
本课程主要面向刚刚入门的前端同学,主要讲述了JS的整体发展及一些比较重要的知识。其中通过一些简单的代码讲述了变量提升、JS的数据是怎么存储的、基础数据类型和复杂数据类型的区别等一些基础知识,也讲解了JS的执行、闭包、垃圾回收等一些稍微进阶一些的知识,希望大家能有所收获。
课程重点
- JS的基本概念
- JS的数据类型
- 变量提升
- 作用域
- 闭包
- 垃圾回收
JS基本概念
JS是JavaScript的简称,它是一种网页脚本语言,可以在浏览器中运行,为网页添加一些特效或者和服务器进行通信。
JS的诞生和Java语言有关,因为当时网景公司(Netscape)和Sun公司结成联盟,想要推出一种简化版的Java语言,使得非专业的网页作者也能很快上手。 JS的设计师是Brendan Eich,他只用了10天时间就把JS设计出来了,借鉴了C语言、Java语言、Scheme语言和Self语言的一些特点。
JS诞生于1995年,比互联网出现的时间晚了几年。
JS也有:Browser进程、GPU进程、渲染进程、插件进程、网络进程…
JS的执行过程
简单来说,JS 是一种解释型语言,它需要一个 JS 引擎来解析和执行它的代码。不同的浏览器或者平台可能使用不同的 JS 引擎,比如 Chrome 使用的是 V8 引擎,Node.js 也使用的是 V8 引擎。
JS 引擎执行 JS 代码的大致流程是:
- 首先,JS 引擎会将 JS 源代码解析成抽象语法树(AST)和作用域信息。
- 然后,JS 引擎会根据 AST 和作用域信息生成字节码(bytecode),字节码是一种中间代码,比机器码更高级,比源代码更低级。
- 接着,JS 引擎会通过解释器(interpreter)逐条解释执行字节码,并且通过即时编译器(JIT compiler)对热点代码进行优化编译,生成更高效的机器码。
- 最后,JS 引擎会通过垃圾回收器(garbage collector)对内存中不再使用的对象进行回收,释放空间。
JS的进阶知识点-垃圾回收
JS 的垃圾回收,是指 JS 引擎对内存中不再使用的对象进行自动清理,释放空间的过程。JS 的垃圾回收机制主要有以下几种:
标记清除:这是 JS 中最常用的垃圾回收方式。它的原理是,从根对象(比如全局对象)开始,递归遍历所有可达的对象,并给它们打上标记,然后清除掉没有标记的对象。 引用计数:这是一种较早的垃圾回收方式。它的原理是,每个对象都有一个引用计数,表示有多少个其他对象引用了它。当一个对象被创建时,它的引用计数为 1,当它被其他对象引用时,它的引用计数加 1,当它不再被引用时,它的引用计数减 1。当一个对象的引用计数为 0 时,表示它不再被使用,可以被回收。这种方式的缺点是,无法处理循环引用的情况,比如两个对象互相引用,但都不再被其他对象引用,这样它们的引用计数永远不会为 0,导致内存泄漏。 分代回收:这是一种基于标记清除的优化策略。它的原理是,根据对象的存活时间将内存分为新生代和老生代两部分。新生代中的对象存活时间短,回收频率高;老生代中的对象存活时间长,回收频率低。对于新生代中的对象,采用复制算法进行回收,即将存活的对象复制到另一块空闲区域中,并清空原来的区域;对于老生代中的对象,采用标记清除或标记整理算法进行回收。 增量回收:这是一种基于分代回收的优化策略。它的原理是,将标记和清除过程分为多个小步骤进行,并穿插在程序执行过程中进行,以减少垃圾回收对程序执行的影响。