JavaScript 函数、线程与异步执行
你需要了解 JavaScript 在底层的运行机制。
以下是关于函数、进程、线程和执行方式的详细解析。
JavaScript 函数的类型
- 具名函数 (Named Function):使用特定的名称。这使得调试变得容易。
- 匿名函数 (Anonymous Function):没有名称。你经常将它们用作回调函数。
- 函数表达式 (Function Expression):你将一个函数赋值给一个变量。
- 箭头函数 (Arrow Function):使用
=>符号的简写语法。 - IIFE:立即调用函数表达式 (Immediately Invoked Function Expression)。它在定义后立即运行。
进程 vs. 线程
进程 (Process) 是运行在你计算机上的程序。
- 每个进程都有自己的内存。
- 如果一个进程崩溃,其他进程仍会继续运行。
- 示例:Chrome 和 Spotify 是独立的进程。
线程 (Thread) 是进程内部的一个微小单元。
- 线程共享相同的内存。
- 它们允许单个程序同时执行多项任务。
- 示例:在 Chrome 内部,一个线程负责渲染页面,而另一个线程处理你的鼠标点击。
同步 vs. 异步
JavaScript 是单线程的。它使用调用栈 (call stack) 一次处理一个任务。
同步执行 (Synchronous Execution):
- 任务按顺序一个接一个地运行。
- 每个任务都要等待前一个任务完成。
- 耗时任务会阻塞代码的运行。
异步执行 (Asynchronous Execution):
- 任务在后台运行。
- 在等待任务完成时,代码不会停止运行。
- 这利用了 Web APIs、回调队列 (Callback Queue) 和事件循环 (Event Loop)。
异步的工作原理:
- JavaScript 将任务(例如定时器)发送给 Web API。
- 主代码继续运行。
- 任务完成后,它会进入回调队列 (Callback Queue)。
- 当调用栈为空时,事件循环 (Event Loop) 会将其移至调用栈 (Call Stack)。
这使得你的 Web 应用保持快速且响应灵敏。