01JS的基本概念
GUI线程把页面上的内容绘制出来。
- JS:单线程(GUI和JS互斥)
- 动态、弱类型(动态语言:运行时才能确定数据类型的语言,变量在使用之前无需申明类型;静态语言:是编译时变量的数据类型就需要确定的语言)
- 面向对象、函数式(可以混用)
- 解释类语言、JIT
- 安全、性能差
JS数据类型
复杂数据类型(对象):数组,函数。 基础数据类型:字符串,undefined,数字,null,symbol,biglnt,布尔。
作用域
变量的可访问性和可见性。静态作用域,通过它就能够预测代码在执行过程中如何查找标识符。
- 全局作用域:函数或变量在全局都可以访问到
- 函数作用域:函数或变量只能在函数内起作用
- 块级作用域:一个块,在花括号内起作用
变量提升
- var有变量提升
- let、const没有变量提升,提问访问会报错
- function函数可以先调用再定义
- 赋值给变量的函数无法提前调用
02JS是这么执行的
、
outer变量环境指针,指向这个执行上下文外层的函数的执行上下文。
- 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份。
- 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出。
创建执行上下文的时候做了什么:绑定this;创建词法环境;创建变量环境。