理解JS

68 阅读2分钟

理解JavaScript

JS基本概念

JS是怎么执行的

  • JS基本概念

诞生: 1995年,Brendan Eich开发

  1. 借鉴C语言的基本语法
  2. 借鉴Java语言的数据类型和内存管理
  3. 借鉴Scheme语言,将函数提升到"第一等公民”( first class)的地位
  4. 借鉴Self语言,使用基于原型 (prototype)的继承机制

数据类型

基础类型:

  • 字符串
  • undefined(Undefined是已经存在的变量,但是没有赋值,JS会给这个已经存在的变量一个默认的undefined值)
  • 数字
  • null
  • symbol(Symbol()函数会返回symbol类型的值。该类型具有静态属性和静态方法)
  • biglnt(BigInt 是一种内置对象,可以表示任意大的整数)
  • 布尔

对象:数组 函数等等

变量提升

  • var有变量提升

  • let、const没有变量提升,提前访问会报错

  • function函数可以先调用再定义

  • 赋值给变量的函数无法提前调用

  • JS是怎么执行的

当 JS 引擎解析到可执行代码片段(通常是函数调用的时候,就会先做一些执行前的准备工作,这个准备工作,就叫做“执行上下文 ( execution context 简称EC ) ”,也叫执行环境。

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

创建执行上下文时做了什么:

  • 绑定this
  • 创建词法环境
  • 创建变量环境

词法环境: 基于 ECMAScript 代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成

变量环境: 变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let 和 cnst)绑定而后者只用来存储 var 变量绑定

Outer: 指向外部变量环境的一个指针