深入了解JS|青训营笔记

74 阅读3分钟

在之前的课程里,我已经基本了解了前端,现在这节课主要讲述了JS的整体发展及一些比较重要的知识。其中通过一些简单的代码讲述了变量提升、JS的数据是怎么存储的、基础数据类型和复杂数据类型的区别等一些基础知识,也讲解了JS的执行、闭包、垃圾回收等一些稍微进阶一些的知识。

JS的基本概念

在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。

为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。

JavaScript程序是由若干语句组成的,语句是编写程序的指令。JavaScript提供了完整的基本编程语句,它们是:

赋值语句、switch选择语句、while循环语句、for循环语句、for each循环语句、do...while循环语句、break循环中止语句、continue循环中断语句、with语句、try…catch语句、if语句(if..else,if…else if…)JS是一种直译式脚本语言。

这节课的重点主要为:

  • JS的基本概念
  • JS的数据类型
  • 变量提升
  • 作用域
  • 闭包
  • 垃圾回收

javascript组成一个完整的 JavaScript 实现是由以下 3 个不同部分组成的: 核心(ECMAScript)、文档对象模型(Document Object Model,简称DOM)、浏览器对象模型(Browser Object Model,简称BOM)。

image.png

那么JS是如何执行的呢,首先在执行一段代码时,js先创立一个执行栈

· js创建全局执行上下文,push到执行栈中,为代码中所有变量分配内存并赋一个初始值(undefined)

· 执行阶段,JS引擎会逐行执行代码,即为之前分配好内存的变量逐个赋值(真实值)

· function的声明和调用 :JS引擎会创建一个函数执行上下文,并push到执行栈中,其创建和执行过程跟全局执行上下文一样。

  • 特殊情况1: 函数中存在对其它函数的调用时,JS引擎会在父函数执行的过程中,将子函数的全局执行上下文push到执行栈,这也是为什么子函数能够访问到父函数内所声明的变量。

  • 特殊情况2: 在子函数执行的过程中,父函数已经return,JS引擎会将父函数的上下文从执行栈中移除,与此同时,JS引擎会为还在执行的子函数上下文创建一个闭包,这个闭包里保存了父函数内声明的变量及其赋值,子函数仍然能够在其上下文中访问并使用这边变量/常量。当子函数执行完毕,JS引擎才会将子函数的上下文及闭包一并从执行栈中移除。