专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

焦虑退散!3 道 JS 面试题详解,轻松吃透核心考点

ins518 2025-05-15 18:20:00 技术文章 2 ℃ 0 评论

亲爱的前端小伙伴们,面试压力是不是像乌云一样笼罩着你?别着急,咱们今天不赶时间,就像泡一杯热茶慢慢品,一起聊聊 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,虽然代码多但更直观。就像有人爱喝浓缩咖啡,有人爱喝手冲咖啡,各有各的风味~你写代码时更看重简洁还是清晰?来评论区聊聊你的编程习惯,让我们在交流中找到共鸣~

今天的分享就到这里啦~面试准备其实可以很温柔,慢慢吃透每一个知识点,就像慢慢攒起生活中的小确幸。觉得有帮助的话,别忘了点赞关注,后续还有更多 “治愈系” 面试题解析,陪你轻松过关~

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表