返回

前端面试问题集锦,夯实JS基础

前端

无论你是一个充满抱负的初学者还是一个经验丰富的开发人员,扎实的前端基础都是通过任何技术面试的关键。JavaScript作为前端开发的基石语言,自然而然地成为面试官考察的重点。本文精心挑选了来自BAT等一线大厂的五道前端面试题,涵盖了JavaScript的核心概念和最佳实践。通过对这些问题的分析和解答,您将加深对JS的理解,夯实基础知识,为成功通过面试做好准备。

1. 对push的理解

const arr = [1, 2];
arr.push(3);
console.log(arr); // [1, 2, 3]

push是根据length来决定从哪里开始插入给定的值。可以发现因为length为2,所以push是从下标为2的地方开始插入值。

2. 对call和apply的理解

const obj = {
  name: 'John Doe',
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

const anotherObj = {
  name: 'Jane Doe'
};

obj.greet(); // Hello, my name is John Doe
obj.greet.call(anotherObj); // Hello, my name is Jane Doe

call方法允许你显式地设置this的值,从而调用对象的方法。在上面的例子中,this的值被设置为anotherObj,因此greet方法被调用时,它使用的是anotherObj的name属性。

apply方法与call方法类似,不同之处在于apply方法接受一个参数数组,而call方法接受一个个的参数。

3. 对闭包的理解

function createCounter() {
  let count = 0;

  return function() {
    count++;
    return count;
  };
}

const counter1 = createCounter();
const counter2 = createCounter();

console.log(counter1()); // 1
console.log(counter1()); // 2
console.log(counter2()); // 1
console.log(counter2()); // 2

闭包是JavaScript中一个非常重要的概念。闭包是指一个函数可以访问其创建环境中的变量,即使该函数已经执行完毕。在上面的例子中,createCounter函数创建了一个闭包,该闭包可以访问其创建环境中的count变量。

4. 对原型链的理解

const obj = {
  name: 'John Doe'
};

console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('toString')); // false

console.log(obj.toString()); // [object Object]

原型链是JavaScript中一个非常重要的概念。原型链允许对象访问其父对象的属性和方法。在上面的例子中,obj对象没有toString方法,但是它可以访问其父对象的toString方法,因为toString方法在Object.prototype对象中。

5. 对事件循环的理解

console.log('Start');

setTimeout(() => {
  console.log('Timeout');
}, 0);

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

console.log('End');

事件循环是JavaScript中一个非常重要的概念。事件循环允许JavaScript在处理同步任务和异步任务时交替执行。在上面的例子中,console.log('Start')和console.log('End')是同步任务,setTimeout和Promise.resolve()是异步任务。事件循环会先执行同步任务,然后再执行异步任务。

通过对这些问题的分析和解答,相信您已经对JS有了更深入的理解。夯实基础知识是成为一名优秀前端开发人员的关键一步。希望本文能够帮助您在未来的面试中取得成功。