JavaScript
基本概念
1995年 Brendan Eich开发
数据类型:
- 基础数据类型
- String
- Boolean
- Number
- BigInt
- Null
- Symbol
- Undefined
- 对象
- Array
- Function
作用域 :变量的可访问性和可见性 静态作用域,通过它就能够预测代码在执行过程中如何查找标识符 作用域分为:
- 全局作用域
- 函数作用域
- 块级作用域
变量提升 :
- var有变量提升
- let、const没有变量提升,提前访问会报错
- function函数可以先调用再定义
- 赋值给变量的函数无法提前调用
JS是如何执行的
执行上下文
当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会做一些执行前的准备工作,这个准备工作,就叫做“执行上下文(execution context,简称EC)”,也称执行环境。
执行上下文分为3类:
- 全局执行上下文
- 代码开始时就会创建,将它压到执行栈的栈底,每个声明周期内只有一份
- 函数执行上下文
- 当执行一个函数时,这个函数内的代码就会被编译,生成变量环境、词法环境等,当函数执行结束时的时候该执行环境从栈顶弹出。
- Eval执行上下文
创建执行上下文的时候做了什么?
- 绑定This
- 创建词法环境
- 基于ECMAScript代码的词法嵌套结构来定义标识符和具有变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成。
- 创建变量环境
- 变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let和const)绑定,而后者只用来存储var变量绑定
- Outer:指向外部变量的一个指针
知识点进阶
闭包
this
- 普通函数的this指向windows
-
- 对象调用指向对象 2. 先赋值再调用,看调用的地方
-
- 创建临时对象 2. 将this指向临时对象 3. 执行构造函数 4. 返回临时对象