[深入了解JS- 前端与 HTML | 青训营笔记 ]

72 阅读3分钟

第八节 深入了解JavaScript

一、JS的基本概念

诞生: 1995 开发出来的

  1. 借鉴C语言基本语法
  2. 借鉴Java语言的数据类型和内存管理
  3. 借鉴Scheme语言
  4. 借鉴Self语言,使用基于原型的继承机制

发展:

  1. Mocha -> 1995.9 LiveScript -> 1995.12 JavaScript
  2. 1997.6 第一版ECMAScript发布
  3. 1999.12 第三版ECMAScript发布
  4. 2009.12 第五版ECMAScript发布
  5. 2009 Ryan创建了Node.js
  6. 2010 lsaac基于node.js写出了npm
  7. 2015.6 第六版ECMAScript发布

Browser进程;GPU进程;渲染进程;插件进程、网络进程...

js特点:

单线程 js是单线程 ,与GUI线程互斥 语言种类:动态、弱类型 不用指定类型 面向对象、函数式 可以混用,并不是纯函数 ,原型、继承、封装 解释类语言、JIT 安全、性能差

数据类型: 基础类型和对象

2.png

作用域

  1. 什么是作用域?变量的可访性和可见性
  2. 静态作用域,通过它就能够预测代码在执行过程中如何查找标识符。JS的作用域又叫词法作用域
  3. 在js中有全局作用域、函数作用域、块级作用域

变量提升

  • var有变量提升
  • let、const没有变量提升,提前访问会报错
  • function函数可以先调用再定义
  • 赋值给变量函数无法提前调用 image.png

二、js是怎么执行的

1.png 执行上下文:当JS引擎解析到可执行代码片段的时候,就会先做一些执行前的准备工作,这个准备工作就是执行上下文(简称EC),也叫执行环境。

可执行代码:全局执行上下文、函数执行上下文、Eval执行上下文。

  1. 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
  2. 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈J顶弹出

创建执行上下文的时候做了什么? 绑定This,创建词法环境,创建变量环境

  • 词法环境:放函数 和 (let和const)定义的函数
  • 变量环境:存储var定义的变量
  • Outer:指向外部变量环境的一个指针

ESP(记录当前执行状态的指针)func执行上下文

三、JS进阶知识点

闭包:

通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭;但如果这个闭包以后不再使用的话,就会造成内存泄漏。如果引用闭包的函数是个局部变量,等函数销毁后,在下次JavaScrpt引擎执行垃圾回收时,判断新闭包这块内容如果已经不再被使用了,那么 Javstipt引擎的垃圾回收器就会回收这块内存。

this: 3.png

垃圾回收: 4.png