基本概念
借鉴C语言基本语法
借鉴java语言的数据类型
借鉴Scheme语言,将函数提升到“第一等公民”(first class)的地位
借鉴Self语言,使用基于原型(prototype)的继承机制
Browser进程
GPU进程
渲染进程
插件进程:
网络进程:网络分发接收
##### 渲染进程
GUI线程(与JS线程互斥)
js线程
事件触发线程
定时器触发线程
网络线程
###动态语言(弱类型语言)
运行时才确定数据类型的语言,变量在使用之前无需申明类型
静态语言(强类型语言)
编译时变量的数据类型就需要确定的语言
###面向对象,函数式
###解释类语言,JIT
###安全,性能差
作用域
变量的可访问性和可见性
静态作用域:通过它就能预测代码在执行过程中如何查找标识符
全局作用域
函数作用域
块级作用域
变量提升
var 有变量提升
let,const没有变量提升,提前访问会报错
function函数可以先调用再定义
赋值给变量的函数无法提前调用
JS怎么执行
源代码转化为字节码
执行上下文
当JS引擎解析到可执行代码片段(通常是函数调用)的时候就会先做一些执行前的准备工作,这个准备工作,就叫做“执行上下文(EC)”也叫执行环境
全局执行上下文:
代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
函数执行上下文:
当执行一个函数时,这个函数内的代码会被编译,生成变量环境,词法环境等,当函数执行结束的时候该执行环境会从栈顶弹出
*词法环境:基于ECMAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联,一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成 *变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let和const)绑定,后者只能用来存储var变量绑定 *Outer:指向外部变量环境的一个指针