> For the complete documentation index, see [llms.txt](https://zg-zhang.gitbook.io/note/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zg-zhang.gitbook.io/note/javascript/es5/1-0/1-1.md).

# 导论

## 一、 什么是 JavaScript 语言

* 一种轻量级的脚本语言
  * 脚本语言：不具备开发操作系统的能力，而是只用来编写控制其他大型应用程序 如：浏览器 的 '脚本'
* 一种嵌入式语言
  * 核心语法不多，只能用来做一些数学和逻辑运算
  * 本身不提供任何与 I/O 输入/输出 相关的 API
  * 都要靠宿主环境 host 提供，只适合嵌入更大型的应用程序环境，去调用宿主环境提供的底层 API
* 一种“对象模型”语言 语法角度
  * 各种宿主环境通过这个模型，描述自己的功能和操作接口，从而通过 JavaScript 控制这些功能
  * 但又不是纯粹的 “面向对象语言”，还支持其他编程范式 如：函数式编程，这会导致任何一个问题，JavaScript 都有多种解决方案
* 核心语法部分相当精简，只包括两部分:
  * 基本的语法构造：操作符、控制结构、语句
  * 标准库：一系列具有各种功能的对象，如：Array、Date、Math
  * 除此之外，就是可调用的宿主环境提供的 API
* 浏览器提供的额外 API 可以分为三大类：
  * 浏览器控制类：操作浏览器
  * DOM 类：操作网页的各种元素
  * Web 类：实现互联网的各种功能&#x20;
* 服务端 node 宿主环境会提供各种操作系统的 API，如：文件操作 API、网络通信 API等

## 二、 JavaScript 的广泛使用

* 浏览器的平台化
* 服务端 Node Deno&#x20;
* 数据库操作 基于 JSON 的 NoSQL
* 移动平台开发 React Native
* 内嵌脚本语言
* 跨平台的桌面应用程序
* Atwood 定律：Any application that can be written in JavaScript will eventually be written in JavaScript

## 三、 JavaScript 的强大性能

* 语法灵活，表达力强
  * 支持类似 C语言 清晰的过程式编程，也支持灵活的函数式编程，可以用来写并发处理 concurrent，尤其适用异步编程
  * JavaScript 的所有值都是对象，不需要麻烦的预定义
* 支持编译运行
  * 在现代浏览器中，JavaScript 都是编译后运行，高度优化，运行效率接近 二进制程序
  * 还有一种 WebAssembly 格式，它是 JavaScript 引擎的中间码格式，全部都是二进制代码，

    由于跳过了编译步骤，可以达到接近原生二进制代码的运行速度，各种语言编译成 WebAssembly，就可以在浏览器里面运行 如 C 和 C++
* 事件驱动 和 非阻塞式设计
  * 在服务端适合高并发环境，普通的硬件就可以承受很大的访问量&#x20;
