第八节 深入了解JavaScript
一、JS的基本概念
诞生: 1995 开发出来的
- 借鉴C语言基本语法
- 借鉴Java语言的数据类型和内存管理
- 借鉴Scheme语言
- 借鉴Self语言,使用基于原型的继承机制
发展:
- Mocha -> 1995.9 LiveScript -> 1995.12 JavaScript
- 1997.6 第一版ECMAScript发布
- 1999.12 第三版ECMAScript发布
- 2009.12 第五版ECMAScript发布
- 2009 Ryan创建了Node.js
- 2010 lsaac基于node.js写出了npm
- 2015.6 第六版ECMAScript发布
Browser进程;GPU进程;渲染进程;插件进程、网络进程...
js特点:
单线程 js是单线程 ,与GUI线程互斥 语言种类:动态、弱类型 不用指定类型 面向对象、函数式 可以混用,并不是纯函数 ,原型、继承、封装 解释类语言、JIT 安全、性能差
数据类型: 基础类型和对象
作用域
- 什么是作用域?变量的可访性和可见性
- 静态作用域,通过它就能够预测代码在执行过程中如何查找标识符。JS的作用域又叫词法作用域
- 在js中有全局作用域、函数作用域、块级作用域
变量提升
- var有变量提升
- let、const没有变量提升,提前访问会报错
- function函数可以先调用再定义
- 赋值给变量函数无法提前调用
二、js是怎么执行的
执行上下文:当JS引擎解析到可执行代码片段的时候,就会先做一些执行前的准备工作,这个准备工作就是执行上下文(简称EC),也叫执行环境。
可执行代码:全局执行上下文、函数执行上下文、Eval执行上下文。
- 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
- 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈J顶弹出
创建执行上下文的时候做了什么? 绑定This,创建词法环境,创建变量环境
- 词法环境:放函数 和 (let和const)定义的函数
- 变量环境:存储var定义的变量
- Outer:指向外部变量环境的一个指针
ESP(记录当前执行状态的指针)func执行上下文
三、JS进阶知识点
闭包:
通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭;但如果这个闭包以后不再使用的话,就会造成内存泄漏。如果引用闭包的函数是个局部变量,等函数销毁后,在下次JavaScrpt引擎执行垃圾回收时,判断新闭包这块内容如果已经不再被使用了,那么 Javstipt引擎的垃圾回收器就会回收这块内存。
this:
垃圾回收: