字节青训营-深入理解js

114 阅读2分钟

js基本概念

基本特点

  • 借鉴C语言的基本语法
  • 借鉴java的数据类型和内存管理
  • 借鉴SCHEME语言,将函数提升到一等公民身份
  • 借鉴SELF语言,使用基于原型(ProtoType)的继承机制

进程与线程的区别

  • 进程:操作系统是以进程为单位执行任务。进程一般由程序,数据集合和进程控制块三部分组成。

  • 线程:进程的一部分。程序执行的最小单位。而进程是任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。线程中可以共享地址空间,全局变量,打开的文件等,每个线程拥有自己的寄存器,局部变量,堆栈等。

js是怎么执行的

执行上下文

词法环境中存储了当前执行上下文中所有的本地变量、函数声明、形参等信息,以及对外部词法环境的引用。

词法环境、变量环境、outer
  • 词法环境: 存放let const 定义的变量以及函数。
  • 变量环境:存放var 定义的变量。
  • outer:指向外部函数的一个指针。

js进阶知识点

闭包

内部函数引用外部函数的变量或参数。

this

在 JavaScript 中,this 关键字的指向取决于函数的调用方式。

补充:

执行上下文(Execution Context)

执行上下文可以理解为当前代码的运行环境。 在 JavaScript 中,运行环境主要包含了全局环境函数环境

在 JavaScript 代码运行过程中,最先进入的是全局环境,而在函数被调用时则进入相应的函数环境。全局环境和函数环境所对应的执行上下文我们分别称为全局上下文函数上下文。 在一个 JavaScript 文件中,经常会有多个函数被调用,也就是说在 JavaScript 代码运行过程中很可能会产生多个执行上下文,那么如何去管理这多个执行上下文呢?

执行上下文是以栈(一种 LIFO 的数据结构)的方式被存放起来的,我们称之为执行上下文栈(Execution Context Stack)

在 JavaScript 代码开始执行时,首先进入全局环境,此时全局上下文被创建并入栈,之后当调用函数时则进入相应的函数环境,此时相应函数上下文被创建并入栈,当处于栈顶的执行上下文代码执行完毕后,则会将其出栈。

所以在执行上下文栈中,栈底永远是全局上下文,而栈顶则是当前正在执行的函数上下文。