JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

JavaScript 让网页活起来

HTML 和 CSS 把网页画出来;JavaScript 则是那一层让网页会听、会回应、还能一边看着你一边取来新东西的能力。

从一张静止的网页,到一张会回应的网页

把一张网页想象成一栋房子。HTML 是骨架——墙、门、房间,它们说「这里是一个标题,这里是一个按钮」。CSS 是油漆和家具——颜色、字体、间距,让待在里面很舒服。光有这两样,你能得到一栋漂亮的房子,但它是一张静止的照片:什么都不动,你敲门它也不应。

JavaScript 就是让这栋房子活过来的东西。它是一门运行在网页内部的编程语言,能在页面加载之后改变各种东西:打开菜单、检查表单、数你点了几下、替换图片、载入新数据。如果说 HTML 和 CSS 描述网页长什么样,那么 JavaScript 描述的就是网页怎么动。整个核心思想就这一句——它是行为层。

回应用户:先监听,再回应

几乎所有的交互都遵循同一个简单的套路:网页监听某件事发生,一旦发生,就运行一段代码来回应。这「某件事」叫做事件(event)——一次点击、一次按键、一张页面加载完成。你把 JavaScript 指向某个元素,相当于在说:「当这个被点击时,就做这件事。」

这是最小的一个真实例子。我们在页面上找到一个按钮,然后挂上一个监听器:有人点击它时,弹出一句友好的提示。慢慢读——就算标点看起来有点怪,它的意思几乎就是大白话。

const button = document.querySelector("#hello");

button.addEventListener("click", function () {
  alert("You clicked me!");
});
找到按钮,然后「当点击发生时,运行这段代码」。最后那一块就是一个函数。

我们交给 addEventListener 的那一小块,是一个函数——一捆有名字或没名字的步骤,它不会立刻运行。我们不希望提示框在页面一加载就弹出来;我们希望把它存起来、等到点击真的发生时再运行。函数就是 JavaScript 把一份活儿揣在口袋里、等到合适时机才掏出来的方式。

这段代码跑在哪里:访客的浏览器里

这里有个让很多新手犯迷糊的点,咱们说得特别清楚。这段 JavaScript 不是跑在某台遥远的服务器上。它就跑在访客的浏览器里——Chrome、Safari、Firefox——在他们自己的笔记本或手机上。浏览器自带一个内置引擎,它读懂你的 JavaScript,然后当场执行里面的指令。

正因为它跑在访客的机器上、就紧挨着他们正在看的屏幕,这一部分被称为前端——一个应用「前台」的部分,也就是用户真正看得见、摸得着的那一面。(「后端」是服务器那一侧,远在某个数据中心,我们在另一篇指南里讲。)前端的超能力是又快又近:一次点击能立刻得到回应,不用大老远跑去任何地方。

等待,但不卡住

有些活儿是瞬间的,比如弹出一个提示。另一些则很慢:向服务器要新数据、等一个几秒钟的计时器、加载一张图片。慢活儿的危险在于:如果页面干脆停下来死等,它就会卡住——按钮没反应、滚动锁死,访客会以为页面坏了。

JavaScript 的答案是异步代码(asynchronous 的简称)。与其堵在门口、把所有人都拦住直到慢活儿做完,你不如说:「先把这个启动,等它完成时,运行这个函数。」这期间页面就能腾出手来继续处理点击和滚动。这就像点咖啡——你不会僵在柜台前,而是拿个取餐器、坐下,咖啡好了取餐器自然会响。

console.log("Asking the server...");

fetch("/api/weather")
  .then(function (response) { return response.json(); })
  .then(function (data) {
    console.log("Weather arrived:", data);
  });

console.log("Page keeps working meanwhile.");
fetch 启动一个慢请求后立刻返回;那些 then 里的函数会在答案到达时、稍后才运行。

注意那两条「这期间」的消息会先于天气数据打印出来——这正好证明页面从没卡住。再注意异步是用什么搭起来的:又是函数。我们把数据就绪后要运行的函数交给 fetch,用的还是点击例子里那套「先揣口袋、回头再掏」的招数。一旦你看清函数既是点击、也是等待的共同积木,一大片 JavaScript 就会突然在脑子里对上号。

小结

现在你已经掌握了 JavaScript 用来做什么的整体轮廓。它是行为层,叠在 HTML 的结构和 CSS 的样式之上,把一张静止的网页照片变成会听、会回应的东西。下面是我们走过的四步路。

  1. JavaScript 是行为层——它在 HTML 结构和 CSS 样式之上添加交互。
  2. 交互 = 监听一个事件(比如点击),然后运行一个函数来回应。
  3. 它跑在访客的浏览器里、在他们自己的设备上——这就是前端。
  4. 对于慢活儿,异步代码先启动工作、稍后再运行一个函数,这样页面永远不会卡住。