2023前端面试题加答案
时间: 2023-10-18 16:18:13 浏览: 66
1. 什么是闭包?如何使用闭包?
答:闭包是指函数可以访问其定义时的词法作用域的特性。使用闭包可以实现许多功能,比如保护变量、模拟私有变量、实现柯里化等。
2. 什么是原型链?如何理解 JavaScript 中的原型链机制?
答:原型链是指 JavaScript 中对象的原型链结构。每个对象都有一个内部属性 [[Prototype]],可以指向其原型对象。原型对象也有自己的原型对象,这样就形成了一个原型链的结构。当访问某个对象的属性时,如果该对象本身没有该属性,就会沿着原型链一层一层往上查找,直到找到该属性或者到达原型链的顶端为止。
3. 什么是事件冒泡?如何阻止事件冒泡?
答:事件冒泡是指在 HTML 中,当一个元素上触发某个事件时,该事件会从该元素开始向上冒泡,直到到达文档根节点为止。
可以通过调用事件对象的 stopPropagation() 方法来阻止事件冒泡。
4. 如何实现跨域请求?
答:可以通过以下几种方式实现跨域请求:
- JSONP:利用 script 标签的跨域特性,动态创建 script 标签,通过回调函数返回结果。
- CORS:服务器设置 Access-Control-Allow-Origin 头部信息允许跨域请求。
- 代理服务器:在自己的服务器上建立一个代理服务器,实现跨域请求。
5. 什么是同步和异步?如何理解 JavaScript 的异步机制?
答:同步和异步是指程序执行的方式。同步是指程序按顺序执行,每个操作必须等待前一个操作完成后才能执行。异步是指程序不按顺序执行,可以在等待某个操作完成的同时执行其他操作。
JavaScript 的异步机制是通过回调函数实现的。当某个操作需要花费一定时间时,JavaScript 会将该操作异步执行,并在操作完成后调用回调函数。这样就可以在等待操作完成的同时执行其他操作,提高程序的效率。
6. 什么是事件委托?如何使用事件委托?
答:事件委托是指将事件处理函数绑定在父元素上,利用事件冒泡机制,让父元素代替子元素执行事件处理函数。
可以通过以下代码实现事件委托:
```javascript
document.querySelector('ul').addEventListener('click', function (event) {
if (event.target.tagName === 'LI') {
console.log('clicked', event.target.innerText);
}
});
```
7. 什么是模块化?如何使用模块化开发?
答:模块化是指将程序分解为独立的模块,每个模块包含自己的代码和数据。模块化可以提高程序的可维护性和可重用性。
在 JavaScript 中,可以使用 CommonJS 或 ES6 模块化规范来实现模块化开发。可以通过以下代码导出和导入模块:
CommonJS:
```javascript
// module.js
module.exports = {
hello: function () {
console.log('Hello, world!');
}
};
// app.js
var module = require('./module');
module.hello();
```
ES6:
```javascript
// module.js
export function hello() {
console.log('Hello, world!');
}
// app.js
import { hello } from './module';
hello();
```
8. 什么是 Promise?如何理解 Promise 的异步机制?
答:Promise 是指一种异步编程的解决方案。Promise 可以将异步操作封装为一个对象,该对象可以处理成功和失败两种情况,并提供链式调用的方式。
Promise 的异步机制是通过 then 方法实现的。当某个操作需要花费一定时间时,Promise 会返回一个 Promise 对象,并立即执行下一条语句。当操作完成后,Promise 会调用 then 方法注册的回调函数。
9. 什么是 HTTP 缓存?如何使用 HTTP 缓存优化 Web 性能?
答:HTTP 缓存是指浏览器缓存 Web 资源(如 HTML、CSS、JavaScript、图片等),避免重复请求,从而提高 Web 性能。
可以通过以下几种方式使用 HTTP 缓存:
- 强缓存:浏览器直接从缓存中读取资源,不会向服务器发送请求。可以通过设置 HTTP 头信息中的 Expires 或 Cache-Control 字段来实现强缓存。
- 协商缓存:浏览器向服务器发送请求,服务器会判断资源是否过期。如果资源未过期,服务器会返回状态码 304 Not Modified 和新的缓存标识,浏览器会从缓存中读取资源。可以通过设置 HTTP 头信息中的 Last-Modified 和 ETag 字段来实现协商缓存。
阅读全文