前端 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 的异步编程模型▷
🦆
什么是事件循环?▷