在之前的课程里,我已经基本了解了前端,现在这节课主要讲述了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)。
那么JS是如何执行的呢,首先在执行一段代码时,js先创立一个执行栈
· js创建全局执行上下文,push到执行栈中,为代码中所有变量分配内存并赋一个初始值(undefined)
· 执行阶段,JS引擎会逐行执行代码,即为之前分配好内存的变量逐个赋值(真实值)
· function的声明和调用 :JS引擎会创建一个函数执行上下文,并push到执行栈中,其创建和执行过程跟全局执行上下文一样。
特殊情况1: 函数中存在对其它函数的调用时,JS引擎会在父函数执行的过程中,将子函数的全局执行上下文push到执行栈,这也是为什么子函数能够访问到父函数内所声明的变量。
特殊情况2: 在子函数执行的过程中,父函数已经return,JS引擎会将父函数的上下文从执行栈中移除,与此同时,JS引擎会为还在执行的子函数上下文创建一个闭包,这个闭包里保存了父函数内声明的变量及其赋值,子函数仍然能够在其上下文中访问并使用这边变量/常量。当子函数执行完毕,JS引擎才会将子函数的上下文及闭包一并从执行栈中移除。