你在面试。
面试官手里拿着一串 JavaScript 冷知识题,而且答案早就写在他那份题库里。你很清楚,只要答错一道,他就可能抬起下巴,用那种“你还是太 junior 了”的眼神看你。
然后,他丢出这样一段代码:
(() => {})();这种题,你一定见过。
它经常出现在 LinkedIn、X,或者各种技术博主的帖子里。评论区会挤满人写下自己的“答案”,然后很遗憾,大概 97% 的人确实答错了。
但更有意思的是,这类帖子通常不会只是安静地问问题。
它们一定会配一个很会制造焦虑的标题:
“大多数开发者解释不清这个。” “Vibe coder 原形毕露。” “真正懂 JavaScript 的人才能答对。”
然后下面有 8000 个点赞。
最讽刺的是,点赞的人里,很多人大概率也没真正搞懂。
所以,我们直接把这件事说清楚。
这玩意儿没那么神秘。
甚至可以说,它就是一场纯粹的浪费时间。
和很多面试题一样。
答案是什么?
这段代码:
(() => {})();什么也没做。
就这样。
它是一个箭头函数,并且这个函数:
不接收任何参数; 函数体里没有任何语句; 默认返回undefined; 然后被立即执行了一次。
如果把它整理成更容易看懂的形式,大概就是:
const fn = () => {}; fn();或者说得再术语一点:
它就是一个 Immediately Invoked Function Expression,也就是 IIFE,立即调用函数表达式。
只不过这里用的是箭头函数。
所以,它并不神秘,也不高级。
它只是执行了一个空函数。
然后什么都没有发生。
那为什么会有这种题?
因为这类题,从来不是真正关于编程的。
它更像是一种表演式聪明。
它出现的场景通常很熟悉:
有人想显得自己很懂; 有人想让别人显得很笨; 大家都在讨论语法细节,但没人真正交付任何有用的东西。
这恰恰很符合某些技术面试里的气氛。
不是在判断你能不能解决问题,而是在观察你是否背过某些冷门表达式。不是在看你有没有工程能力,而是在测试你能不能在压力下认出一段符号游戏。
我见过一些开发者,他们真的会在 code review 里把这种东西丢出来,像是在展示肌肉。
也是同一批人,会为了 import 顺序争论半天,而你的功能还在审批里卡 8 个小时。
问题是,这些东西真的没那么重要。
这类题之所以常被拿来问,只是因为它很方便:
容易出题; 容易制造门槛; 容易把记忆力伪装成理解力。
但它并不能证明一个人会不会写好代码。
它只能证明一个人最近有没有刷过这类 JavaScript trivia。
面试里最荒唐的地方
很多技术面试都有一个问题:
它们把“聪明”误认为“能力”。
更准确地说,是把“看起来懂很多语法细节”,误认为“能做好工程”。
于是,候选人被要求在高压环境下回忆一些晦涩细节。面试官坐在对面沉默地看着你挣扎,仿佛你没能立刻解释某段奇怪代码,就说明你不够优秀。
但这测出来的不是能力。
测出来的只是:你昨晚有没有刚好背到这道题。
真正的软件开发,根本不是每天坐在那里破解标点符号谜题。
真正的软件开发是:
理解需求; 处理混乱系统; 和不认真读 PR 的人沟通; 修一个下午 4 点冒出来的 bug,然后发现它莫名其妙吞掉了整个 sprint; 在旧代码、新需求、时间压力和团队沟通之间找到能落地的方案。
这才是工程。
不是盯着:
(() => {})();然后假装它能决定一个人的水平。
行业真正的问题
我们一直在混淆两件事。
把 cleverness 当成 competence。 把 syntax tricks 当成 engineering skill。
会解释冷门语法,不等于会构建可维护系统。 能秒答奇怪题目,不等于能调试线上问题。 熟悉语言边角料,也不等于能和团队把复杂功能推进上线。
当然,理解语言机制是有价值的。
但问题在于,这类题经常不是为了帮助人理解语言,而是为了筛掉那些“不像自己”的候选人。
它变成了一种 gatekeeping。
你答上来了,就像加入了某个小圈子。 你犹豫了,就被贴上“不够资深”的标签。
这很荒唐。
如果一个候选人能够:
构建可维护的系统; 清晰沟通复杂问题; 调试真实世界里的故障; 在混乱需求中找到可靠方案;
但他看到这段空箭头函数时停顿了一下。
那你大概率应该录用他。
反过来,如果你的招聘流程因为这种题把他筛掉了。
那问题可能不在候选人。
而在你的招聘流程。
这段代码真正暴露了什么?
它没有暴露开发者太菜。
它暴露的是行业太爱装。
一段什么都不做的函数,被包装成“检验水平”的题。一个空函数,居然能被拿来制造焦虑、筛选候选人、收割流量。
这本身就很讽刺。
因为这段代码确实什么都没做。
但我们却假装它很重要。
更糟的是,很多开发者也配合这种表演。我们明知道它对实际工作帮助有限,却还是会转发、点赞、评论、争论。仿佛只要在这种题上赢了,就能证明自己更专业。
可真正的专业,不是靠这种东西证明的。
真正的专业,是你能把复杂问题讲清楚,把混乱系统理顺,把团队需要的东西交付出来。
不是在面试里对着一堆括号表演背诵。
最后
这段 JavaScript:
(() => {})();就是一个立即执行的空箭头函数。
它不接收参数。 它不执行逻辑。 它返回undefined。 它没有副作用。 它什么也不改变。
它不神秘。
也不值得被包装成行业智商测试。
如果你答不出来,不代表你不会写代码。
如果你答出来了,也不代表你就是高级工程师。
它最多只能说明,你见过这种题。
而一个行业如果总是用这种东西来判断开发者,那真正需要被面试的,可能不是候选人。
是这个行业自己。
最后:
精通 React 面试:从零到中高级(针对面试回答)
CSS终极指南
Vue 设计模式实战指南
20个前端开发者必备的响应式布局
深入React:从基础到最佳实践完整攻略
python 技巧精讲
React Hook 深入浅出
CSS技巧与案例详解
vue2与vue3技巧合集