返回

穿越前端19个经典面试题,你解锁了多少关卡?

前端

前端开发入门:破解面试经典八题

浅拷贝与深拷贝

这两个概念在前端开发中经常出现,本质上区别在于:

  • 浅拷贝:仅复制对象的属性值,而不复制对象的引用。对浅拷贝对象进行修改不会影响原始对象。
  • 深拷贝:不仅复制对象的属性值,还复制对象的引用。对深拷贝对象进行修改也会影响原始对象。

实现浅拷贝可使用 Object.assign() 方法或扩展运算符 (...),而实现深拷贝可使用 JSON.parse(JSON.stringify(对象)) 方法。

闭包

闭包是指在函数内部定义的函数,它可以访问函数外部的变量,即使函数已经执行完毕。它的原理是,函数执行完毕后,它的作用域不会被销毁,而是保存在内存中,因此函数内部定义的函数可以继续访问这些变量。

闭包的应用场景广泛,例如创建私有变量、实现惰性加载和事件处理程序。

事件委托

事件委托是一种处理事件的技巧,将事件处理程序委派给父元素,而不是为每个子元素单独添加事件处理程序。这样可以减少 DOM 元素上的事件监听器数量,提高性能。

事件委托的原理是,当子元素触发事件时,事件会沿着 DOM 树向上冒泡,直到到达父元素。因此,我们可以在父元素上添加事件处理程序,然后在事件处理程序中判断触发事件的子元素。

DOM操作

DOM 操作是指对 HTML 元素进行的操作,是前端开发的基础。常用的 DOM 操作方法包括:

  • 获取元素:document.getElementById()、document.getElementsByClassName()、document.getElementsByTagName()
  • 修改元素:element.innerHTML、element.innerText、element.style
  • 创建元素:document.createElement()
  • 删除元素:element.remove()

异步处理

异步处理是指程序在执行过程中不会阻塞其他操作的执行。常用的异步处理方法包括:

  • 回调函数
  • Promise
  • async/await

模块化

模块化是指将代码分成多个独立的模块,每个模块都有自己的功能。模块化的优点在于:

  • 代码更整洁,更易维护
  • 提高代码的可重用性
  • 提高开发效率

跨域解决

跨域是指在不同的域名、端口或协议之间发送请求。由于浏览器的同源策略限制,需要特殊的方法来解决跨域问题。

常用的跨域解决方法包括:

  • JSONP
  • CORS
  • WebSocket

手写算法

手写算法是指不借助任何工具或库,自己编写算法来解决问题。手写算法的优点在于:

  • 锻炼编程思维
  • 提高问题解决能力
  • 加深对算法的理解

常见问题解答

1. 如何判断两个对象是否相等?
对于浅拷贝对象,可以通过 Object.is() 方法判断;对于深拷贝对象,可以使用 JSON.stringify() 方法转换对象为 JSON 字符串,然后比较这两个 JSON 字符串是否相等。

2. 如何将 HTML 元素转换为 DOM 对象?
可以使用 document.getElementById()document.getElementsByClassName()document.getElementsByTagName() 方法。

3. 如何在 JavaScript 中使用异步请求?
可以使用 fetch() 方法或 XMLHttpRequest 对象。

4. 模块化的优缺点是什么?
优点: 代码更整洁,更易维护;提高代码的可重用性;提高开发效率。缺点: 增加代码复杂度;需要模块加载器或构建工具。

5. 什么是 CORS?
CORS(跨域资源共享)是一种机制,允许不同源的网站相互发送 HTTP 请求。