深入理解JS
JS的基本概念
诞生:
1995年,Brendan Eich开发
-
借鉴C语言的基本语法
-
借鉴Java语言的数据类型和内存管理
-
借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位
4.借鉴Self语言,使用基于原型(prototype)的继承机制
发展:
-
Mocha -> 1995.9 LiveScript -> 1995.12 JavaScript
-
1997年6月,第一版ECMAScript发布
-
1999年12月,第三版ECMAScript发布
-
2009年12月,第五版ECMAScript发布
-
2009 年,Ryan 创建了 Node.js
-
2010年,Isaac基于node.js写出了npm
-
2015年6月,第六版ECMAScript发布
JS的特点
- 单线程
- 动态、弱性
- 面向对象、函数式
- 解释类语言、JIT
- 安全、性能差
- ......等等
数据类型
作用域
变量的可访问性和可见性
静态作用域,通过它就能够预测代码在执行过程中如何查找标识符
变量提升
-
var有变量提升
-
let、const没有变量提升,提前访问会报错
-
function函数可以先调用再定义
-
赋值给变量的函数无法提前调用
JS的执行过程
当 JS 引擎解析到可执行代码片段(通常是函数调用)
的时候,就会先做一些执行前的准备工作,这个准备工
作,就叫做“执行上下文(
execution context 简
称EC )” ,也叫执行环境
全局执行上下文
函数执行上下文
Eval执行上下文
可执行代码
• 全局执行上下文: 代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
• 函数执行上下文: 当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出
• 词法环境: 基于 ECMAScript 代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成
• 变量环境: 变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let 和 const)绑定,而后者只用来存储 var 变量绑定
• Outer: 指向外部变量环境的一个指针
JS的垃圾回收机制
总结
通过简单的对js的认识,理解了js的基本概念,比如js的特性,js 的数据类型、作用于和变异提升,其中var有变量提升,而let和const没有变量提升,也理解了js是如何去执行的,也学习到了闭包、this关键字和垃圾回收等知识点。