网站首页 > 技术文章 正文
亲爱的前端小伙伴们,面试压力是不是像乌云一样笼罩着你?别着急,咱们今天不赶时间,就像泡一杯热茶慢慢品,一起聊聊 JS 面试里的 3 道「老朋友」题目。用最轻松的方式吃透知识点,让面试准备变成一场治愈的学习之旅~
第一题:变量提升:给代码「整理房间」的小魔法
面试官常问:“var、let、const 有什么区别?说说变量提升是怎么回事?”别紧张,咱们把代码想象成一个房间:var就像早起把东西随便堆在显眼处(变量提升),但没规定只能在卧室用(函数作用域);let和const则是精致收纳盒,只在专属抽屉(块级作用域)里有效,而且const还要求一开始就放好东西(必须初始化)。
// var的「随意堆」:声明会被提升到作用域顶部,但赋值还在原地
console.log(coffee); // 输出undefined(提前知道有coffee,但还没冲好)
var coffee = '美式';
// let的「专属抽屉」:没声明前不能用,避免翻错抽屉
// console.log(tea); // 报错!tea还没在这个抽屉里登记(暂时性死区)
let tea = '龙井';
// const的「固定收纳」:一旦放好就不能换位置(变量不可重新赋值)
const milk = '全脂';
// milk = '脱脂'; // 报错!牛奶盒贴好标签就不能换啦
记住哦:现在写代码就像给未来的自己整理房间,多用let和const,少用var,代码会更清爽~
第二题:this 指向:找到「我的主人是谁」
“说说 JavaScript 中 this 的绑定规则,不同场景下怎么判断?”这个问题就像找 “我的主人是谁”:普通函数里的 this 是 “全局主人”(默认 window),对象方法里的 this 是 “当前对象主人”,构造函数里的 this 是 “新创建的实例主人”,而箭头函数没有自己的主人,永远跟着外层主人走(继承外层 this)。
// 普通函数:喊我干活的是window(严格模式下没人喊,是undefined)
function wakeUp() {
console.log(this); // 非严格模式下是Window对象,像在喊“全局起床啦”
}
wakeUp();
// 对象方法:谁调用我,我就跟谁走
const morning = {
drink: '豆浆',
enjoy() {
console.log(this.drink); // 这里的this是morning对象,输出'豆浆'
}
};
morning.enjoy();
// 箭头函数:永远跟着外层主人,比如在对象里用箭头函数会“认错主人”
const noon = {
food: '米饭',
eat: () => {
console.log(this.food); // 这里的this是全局window,找不到food会报错哦
}
};
noon.eat();
遇到 this 别慌,心里默念:“你被谁调用,就属于谁”,箭头函数除外哦~
第三题:事件循环:JS 的「任务排队机」怎么工作?
“解释一下 Event Loop,同步和异步任务怎么处理?”这就像周末去餐厅吃饭:同步任务是 “堂食”,必须马上处理(主线程排队执行);异步任务是 “外卖”,先记下来(放到任务队列),等堂食吃完了,再按优先级处理外卖(先处理 “精致小蛋糕” 微任务,再处理 “大汉堡” 宏任务)。
console.log('1. 先吃堂食:开始');
setTimeout(() => { // 宏任务(大汉堡),等1秒后处理
console.log('4. 外卖汉堡到了');
}, 0);
Promise.resolve() // 微任务(精致小蛋糕),优先级更高
.then(() => {
console.log('3. 先吃小蛋糕');
});
console.log('2. 堂食吃完了');
// 执行顺序:堂食1→2→先吃小蛋糕3→再吃汉堡4,是不是很清晰?
理解事件循环就像掌握餐厅排队规则,知道哪些任务先做,哪些后做,写代码时就不会手忙脚乱啦~
面试应答模板:用生活语言轻松沟通
问题 1:变量声明的区别?
“var 是 ES5 的老语法,会把声明提前到作用域顶部(变量提升),而且只有函数作用域,容易让变量到处跑(污染全局)。现在更推荐用 let 和 const,它们有块级作用域(比如 if 里声明的变量,外面看不到),let 的值可以变,const 声明后必须赋值且不能重新赋值(适合固定值,比如配置项)。用它们就像给变量分好房间,不乱跑也不乱改,代码更整洁。”
问题 2:this 怎么判断?
“this 的指向看调用方式:普通函数调用时,默认指向 window(严格模式下是 undefined);对象里的方法,谁调用就指向谁(比如 obj.fn (),this 就是 obj);构造函数里的 this 指向新创建的实例;箭头函数没有自己的 this,永远跟着外层作用域的 this 走。可以想象成:普通函数是‘全局打工人’,对象方法是‘专属打工人’,箭头函数是‘跟着老大混的打工人’。”
问题 3:事件循环是什么?
“JavaScript 是单线程,同一时间只能做一件事。事件循环就是处理任务的机制:先执行同步任务(主线程排队),再处理异步任务。异步任务分微任务和宏任务,微任务优先级更高(比如 Promise 的 then),会在宏任务(比如 setTimeout)之前执行。就像先处理紧急的小事,再处理耗时的大事,保证程序流畅运行。”
写代码时,你更喜欢「简洁派」还是「清晰派」?
有人觉得代码越短越好,比如用 Set 一行搞定数组去重,看着清爽;也有人喜欢把逻辑拆开,比如用 filter+indexOf,虽然代码多但更直观。就像有人爱喝浓缩咖啡,有人爱喝手冲咖啡,各有各的风味~你写代码时更看重简洁还是清晰?来评论区聊聊你的编程习惯,让我们在交流中找到共鸣~
今天的分享就到这里啦~面试准备其实可以很温柔,慢慢吃透每一个知识点,就像慢慢攒起生活中的小确幸。觉得有帮助的话,别忘了点赞关注,后续还有更多 “治愈系” 面试题解析,陪你轻松过关~
猜你喜欢
- 2025-05-15 面试必问!前端自动检测代码更新大揭秘
- 2025-05-15 疲惫夜晚充电!1 道 JS 异步手写题攻克面试关键考点
- 2025-05-15 宁静清晨!两道 CSS 面试题,助你从容应对职场挑战
- 2025-05-15 惬意晨光中!2 道 JS 面试题漫谈,开启知识小旅程
- 2025-05-15 前端面试被问「你在未来 5 年的职业目标是什么」
- 2025-05-15 焦虑求职季!3 大 JS 高频题解析,助你面试稳拿 offer
- 2025-05-15 悠然晨光里!2 道 JS 面试题慢品,开启高效学习日
- 2025-05-15 疲惫下班别愁!1 道 TypeScript 面试题助你充电避坑
- 2025-05-15 懵圈!面试官追问 HTML 空元素细节,3 分钟吃透核心考点
- 2025-05-15 [抓狂瞬间] 5 大差异 + 布局绝招!前端元素面试通关秘籍
你 发表评论:
欢迎- 最近发表
-
- 宇宙厂:深入聊聊 CJS 和 ESM 模块化三点核心差异?
- #前端高手进阶#一起薅羊毛~
- 前端基础进阶(十):深入详解函数的柯里化
- 2025 年 Object 和 Map 如何选择?
- 为何说 postMessage 才是真正的 setTimeout(0)?
- 为什么高手写 JS 总是又快又好?这10个技巧你要知道
- 2025 年 Deno 终于官宣 pnpm 和 Yarn 可使用 JSR?
- 宇宙厂:为什么前端要了解 Interaction to Next Paint (INP)
- Node.js 原生支持 TypeScript?开发者需要了解的一切
- 请务必用 postTask/isInputPending 释放JS主线程!
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)