凌晨三点,末考宿舍走廊的末考声控灯被我跺亮了七次。每次亮起,末考都看见隔壁床的末考老张对着笔记本电脑屏幕发呆——他的《web期末考试》复习资料还停留在第一页的"HTTP协议概述"。
这场景太熟悉了。末考这学期选了web开发课的末考人,谁不是末考抱着"写个网页还不简单"的心态来的?结果期中作业是做个带登录功能的个人主页,全班四十三个人,末考有十七个把密码明文存在了localStorage里。末考老师批改时气得直摇头,末考在课堂上念了其中一份代码,末考那哥们把密码存在了名为"password"的末考变量里,注释还写着"这里存密码"。末考
期末考试更绝。末考不是末考让你背概念,是给你一台没联网的电脑,四个小时,现场做一个响应式网站,要求用上Flexbox、CSS Grid、至少两个JavaScript交互功能,还要能通过W3C标准验证。考场里键盘声噼里啪啦响,但你要是凑近看,会发现一半人的浏览器控制台里全是红色报错。
我自己的翻车点在最后四十分钟。做那个轮播图时,setInterval和clearInterval的逻辑死活理不清,图片转到第二张就卡住。监考老师路过,瞄了眼我的屏幕,没说话。但那种沉默比说话还吓人。最后我干脆把自动播放删了,改成手动点击切换——功能是能用了,但怎么看都像在交作业前临时拆了房子的承重墙。
考完出来,楼道里到处都是"你做了几个交互"的互相询问。有个女生说自己用CSS动画做了个会变形的导航栏,结果动画触发条件写错了,鼠标一移开就疯狂抖动,像得了帕金森。还有个男生更惨,他为了展示"创意",把整个页面背景设成了渐变色,结果忘了考虑对比度,文字全糊在背景里,他自己都没发现,交卷前五分钟还在那儿调动画速度。
但说实话,这场考试让我真正记住的,不是那些知识点。是考到一半,前排有个同学突然举手问:"老师,我能用console.log调试吗?" 老师愣了一下,说:"你平时写代码不用浏览器开发者工具吗?" 那同学脸唰地红了——他这学期所有的调试,都是靠alert弹窗。一个弹窗跳出来点确定,再弹一个,再点。他写那个表单验证时,页面上密密麻麻弹了二十多次alert,监考老师都看笑了。
这种考试方式挺狠的。它不考你"什么是RESTful API",而是让你在没网的环境里,从零开始搭一个能跑的前端项目。你平时靠复制粘贴、靠查文档、靠看视频教程带过的问题,这会儿全暴露了。CSS选择器优先级记不清?那就看着样式乱套。事件委托不会用?那就给每个按钮单独绑监听器,代码写到手酸。闭包搞不懂?那你的计数器变量就会被全局污染,点一次加两。
我最后交上去的网站,说实话,丑得可以。颜色搭配像西红柿炒蛋,导航栏在手机端会溢出屏幕,那个手动轮播图切换时还有半秒的白屏。但我用上了所有我真正会的东西——包括考试前一夜临时恶补的localStorage存储,和那个终于被我搞明白的addEventListener参数顺序。
走出考场时,老张问我:"你那个轮播图最后怎么解决的?" 我说:"删了自动播放。" 他哈哈大笑:"我也删了。我那个下拉菜单的动画,最后直接改成display:none和block切换,一点过渡都没有。" 我们俩站在教学楼门口,看着手机里别人发的"考完嗨起来"的朋友圈,突然觉得这考试挺值——它逼着你承认,你其实不会,然后你才真的开始学。
现在那门课的成绩早出来了,我拿了B。不高,但我知道自己哪块缺。要是下学期还有web课,我大概会提前把Flexbox的align-items和justify-content的差别刻在脑子里——毕竟考试时,我对着这两个属性发了整整十分钟呆,最后靠试错才把垂直居中搞定。