如何通过JavaScript面试:热门问题与答案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何通过JavaScript面试:核心问题



JavaScript开发者面试(尤其是专注于Node.js的岗位)不仅仅是语法检查。雇主希望看到应聘者对异步机制、作用域以及事件循环工作原理的深入理解。在本文中,我们整理了面试中实际会问到的高频问题,并附上代码示例和解析。



1. 闭包——函数式JS的基石



问题:"什么是闭包?它在Node.js中如何工作?"



闭包是一个能“记住”其词法环境的函数,即使外部函数已执行完毕。这是JavaScript中实现数据封装的关键机制。



function createCounter() {  let count = 0;  return function() {    count++;    return count;  };}

const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2


面试官考察点:闭包是Node.js中模块、函数工厂和事件处理程序的基础。不理解闭包就无法处理异步回调。



2. 事件循环与异步机制(Async/Await、Promise)



问题:"请解释事件循环的工作原理。这段代码会输出什么?"



console.log('1');

setTimeout(() => console.log('2'), 0);

Promise.resolve().then(() => console.log('3'));

console.log('4');


答案:1, 4, 3, 2。先执行同步代码,然后是微任务(Promise.then),最后是宏任务(setTimeout)。



事件循环是一种机制,允许Node.js在单线程环境下执行非阻塞操作。它包含多个阶段:

  • 定时器阶段——执行setTimeout/setInterval的回调
  • I/O回调阶段——处理已完成的输入/输出操作
  • 轮询阶段——获取新的I/O事件
  • 检查阶段——执行setImmediate()
  • 关闭回调阶段——关闭连接


技巧:在面试中,展示你对process.nextTick()和setImmediate()区别的理解。nextTick在事件循环的下一个阶段之前执行,而setImmediate在检查阶段执行。



3. 执行上下文(this)与箭头函数



问题:"在不同情况下this的值是什么?如何改变执行上下文?"



this的值取决于函数的调用方式,而非声明位置。在Node.js(严格模式)的普通函数中,this为undefined,而在浏览器中则为window。



const obj = {  name: 'Node.js',  regularFunc: function() {    console.log(this.name);  },  arrowFunc: () => {    console.log(this.name);  }};

obj.regularFunc(); // 'Node.js'obj.arrowFunc(); // undefined(this取自外部上下文)


如何管理上下文:

  • call(thisArg, arg1, arg2)——使用指定的this和参数调用函数
  • apply(thisArg, [args])——类似,但以数组形式传递参数
  • bind(thisArg)——创建绑定this的新函数
  • 箭头函数——没有自己的this,使用词法上下文


4. 原型与继承(原型链)



问题:"JavaScript中的原型继承如何工作?与类的区别是什么?"



JavaScript使用原型继承:每个对象都有一个内部引用[[Prototype]](可通过__proto__或Object.getPrototypeOf()访问)。



function Animal(name) {  this.name = name;}

Animal

博客

书籍推荐