interview
javascript-frontend-basics
const 对象的属性可以修改吗

前端 JavaScript 基础面试题, const 对象的属性可以修改吗?

前端 JavaScript 基础面试题, const 对象的属性可以修改吗?

QA

Step 1

Q:: const 对象的属性可以修改吗?

A:: 在 JavaScript 中,const 声明的对象的属性是可以修改的,但不能重新分配整个对象。例如:

 
const obj = { a: 1 };
obj.a = 2; // 这是允许的
obj = { b: 3 }; // 这是不允许的
 

Step 2

Q:: 什么是闭包?

A:: 闭包是指那些能够访问自由变量的函数。换句话说,闭包可以记住并访问它的词法作用域,即使这个函数是在其词法作用域之外执行的。例如:

 
function outerFunction() {
  const outerVariable = 'I am outside!';
  function innerFunction() {
    console.log(outerVariable); // 可以访问 outerVariable
  }
  return innerFunction;
}
const inner = outerFunction();
inner(); // 输出 'I am outside!'
 

Step 3

Q:: 什么是原型链?

A:: 原型链是 JavaScript 实现继承的方式。当访问一个对象的属性时,如果这个属性不存在于该对象上,JavaScript 会查找该对象的原型(通过 __proto__Object.getPrototypeOf)上的属性,这个过程会一直进行,直到找到该属性或到达原型链的末尾(即 null)。

Step 4

Q:: 什么是事件委托?

A:: 事件委托是一种利用事件冒泡的技术,将一个事件处理程序添加到多个元素的共同祖先元素上,而不是给每个子元素添加事件处理程序。当事件触发时,事件处理程序会通过检查 event.target 来确定事件的目标。例如:

 
document.getElementById('parent').addEventListener('click', function(event) {
  if (event.target && event.target.matches('li')) {
    console.log('List item clicked');
  }
});
 

Step 5

Q:: 什么是 Promise?

A:: Promise 是一个表示异步操作最终完成或失败的对象。它有三个状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise 提供了 .then.catch 方法,用于注册成功和失败的回调函数。例如:

 
let promise = new Promise(function(resolve, reject) {
  setTimeout(() => resolve('done!'), 1000);
});
promise.then(
  result => console.log(result), // 1秒后输出 'done!'
  error => console.log(error)
);
 

用途

面试这些内容是为了评估候选人对 JavaScript 基础和核心概念的理解。理解 const 声明的对象属性是否可以修改,闭包,原型链,事件委托,以及 Promise 等知识,都是成为一个优秀前端开发者的必要条件。这些知识在实际生产环境中非常常见,例如:处理异步请求(Promise)、优化 DOM 事件处理(事件委托)、实现模块化和代码复用(闭包和原型链)。\n

相关问题

🦆
解释 JavaScript 的作用域和作用域链

JavaScript 的作用域是指变量的可访问范围。作用域链是由多个作用域嵌套形成的链条。每个函数都有自己的作用域,当访问一个变量时,JavaScript 会从最内层的作用域开始查找,如果找不到就向外层作用域继续查找,直到全局作用域。

🦆
什么是事件冒泡和事件捕获?

事件冒泡是指事件从最具体的元素(目标元素)开始,一直向上传播到最不具体的元素(文档或窗口)。事件捕获是指事件从最不具体的元素开始,一直向下传播到最具体的元素。在标准事件模型中,事件捕获阶段先于事件冒泡阶段。

🦆
解释 JavaScript 的异步编程模型

JavaScript 的异步编程模型包括回调函数、Promise 和 async/await。回调函数是最基本的异步处理方式,但容易导致回调地狱。Promise 提供了一种更清晰的异步操作链式调用方法,避免了回调地狱。async/await 是基于 Promise 的语法糖,使得异步代码看起来像同步代码,更加简洁和易读。

🦆
什么是事件循环?

事件循环是 JavaScript 处理异步操作的机制。它不断地检查调用栈和任务队列,如果调用栈为空(即所有同步代码执行完毕),事件循环会将任务队列中的第一个任务移入调用栈并执行。这个过程不断重复,从而使得异步代码能够在合适的时机执行。