浏览器地址栏里敲下localhost:8080,训报回车。训报页面刷出来那一刻,训报我盯着屏幕上那个笨拙的训报注册表单,忽然觉得前三天熬的训报夜都值了。这是训报我第一次亲手把HTML、CSS、训报JavaScript拼成能跑起来的训报东西,虽然它丑得像个毛坯房。训报
实训第一天,训报老师没讲任何理论,训报直接扔给我们一个任务:三天内做个人主页,训报必须包含表单验证和动态时间显示。训报我连flex布局都还没摸透,训报就硬着头皮上了。训报第一版页面,导航栏和内容区像两个互不相识的陌生人,垂直堆在一起,间距歪七扭八。室友路过瞥了一眼,说“你这网站长得挺复古的”。我盯着那行字,默默把padding从10px调到20px,又调回15px,循环了大概十几次。
真正让我开窍的是调试那个日期函数。需求是页面右下角实时显示当前时间,精确到秒。我照着教程写了个setInterval,结果时间卡住不动。反复检查,发现我把interval的毫秒数写成了1000,但函数内部又用了一个setTimeout去递归调用,两个定时器互相打架。删掉多余的setTimeout,时间开始流畅跳动。那一刻我意识到,代码出bug往往不是语法不会,而是逻辑绕了自己。
第三天下午,我决定给表单加个密码强度提示。原本只想做个简单的长度判断,但动手后发现可以拆成三个条件:长度、大小写混合、含数字。用if嵌套写完后,测试时发现密码框一输入就报错——因为每次按键都会触发验证,而空字符串也被算作“不满足条件”。后来加了个if(value.length > 0)的前置判断,问题解决。这种小坑踩多了,反而对“边界条件”四个字有了肌肉记忆般的理解。
最后验收时,老师让我们互相看作品。有人用了Bootstrap把界面整得光鲜亮丽,有人引了动画库让页面花哨得像个游戏。我的页面依然朴素,但那个手动写的实时时钟和密码验证器,每一行代码我都能解释出为什么。老师路过时问了一句:“这个时间刷新会不会有延迟?”我愣住,回去查了资料,才知道setInterval有最小间隔限制,而且浏览器标签页切后台时会暂停计时。于是改用Date对象每次取当前时间再渲染,彻底解决了累积误差。
实训结束那天,我把代码上传到GitHub,顺手写了份README。说实话,这份报告里写的每个坑,都比教材上的示例代码更让我长记性。毕竟,看别人写的代码像看菜谱,自己炒糊了才知道火候要小一点。下次如果再让我做网页,我大概能少踩一半坑——但剩下那另一半,还得亲手去踩一遍才踏实。