标签:面试

416 篇文章

八股文02-17
阅读

实现一个函数,支持深度遍历 JS 对象,且允许再遍历的时候,修改对象的数据,得到新的对象

关键词 :深度遍历对象 实现一个这样的函数,我们需要考虑几个关键点: 1. 深度遍历 :使用递归遍历对象的所有层级。 2. 修改数据 :在遍历过程中允许修改对象的数据。 3. 返回新对象 :保持原对象不变,对每个属性或值进行操作,将修改后的结果存储在新的对象中返回。 以下是一个简单示例,展示了如何实现上述功能: 在这个例子中: 函数通过递归遍历接受两个参数:要遍历的对象和一个修改函数( ),这个修改函数对每个遇到的值进行操作。 如果当前...

#面试
八股文02-17
阅读

常见的前端检测内存泄露的方法有哪些

怎么检测内存泄漏 内存泄漏主要是指的是内存持续升高,但是如果是正常的内存增长的话,不应该被当作内存泄漏来排查。排查内存泄漏,我们可以借助 的 和 选项。举个栗子: 我们新建一个 的文件,完整代码如下: 页面上有一个按钮用来开始函数调用,方便我们控制。点击按钮,每个200毫秒执行一次bind函数,即在全局监听click事件,循环次数为50次。 在无法确定是否发生内存泄漏时,我们可以先使用Performance来录制一段页面加载的性能变化,...

#面试
八股文02-17
阅读

我使用 vite 打包工程, 输出为 es6 的代码, 但是我依赖的 模块是 es5 commonjs 写的;这个他是怎么处理的

关键词 :vite 打包、es6 转 es5 1. Vite 的模块解析机制 概述 :Vite 在打包过程中会对模块进行解析。当遇到 ES6 模块(ESM)和 模块混合的情况时,它会根据模块的类型采用不同的处理策略。Vite 内部的模块解析系统能够识别模块的语法是 ES6 还是 2. 对于 模块的处理 转换为 ESM(在必要时) :如果 Vite 发现依赖的模块是 模块,它会尝试将其转换为 ES6 模块格式。这是因为 Vite 的打包目...

#面试
八股文02-14
阅读

escape、encodeURI、encodeURIComponent 区别

关键词 :js URL 编码解码 在 JavaScript 中, 、 和 都是用于编码 URL 或字符串的函数,但它们有一些区别: 1. 函数用于编码字符串中的特殊字符,使其能够安全地传输。它对字符进行编码,包括非 ASCII 字符和特殊字符。但需要注意的是, 不会编码 URL 中的保留字符(例如 ),它只会编码其他字符。 2. 函数用于对整个 URL 进行编码,用于将 URL 中的特殊字符转换为可传输的形式。它不会编码 URL 中的保...

#面试
八股文02-14
阅读

Object.defineProperty 是否可以监听拦截数组变化

关键词 :Object.defineProperty 监听数组变化 1. 基本原理与部分可行性 可以用于监听和拦截数组的某些变化,但不是原生地对所有数组操作都能很好地监听。 数组在 JavaScript 中是特殊的对象,其索引可以看作是对象属性。理论上,我们可以使用 为数组的每个索引(属性)定义属性描述符,以此来尝试监听数组元素的读取和设置操作。 例如,对于一个简单的数组元素设置操作,可以这样定义: 当通过 读取或设置元素时,相应的 和...

#面试
八股文02-14
阅读

requestAnimationFrame 了解多少

是一种优化动画性能的方法,它会在浏览器重绘之前执行指定的回调函数。相比于传统的 或 方法, 会在浏览器的下一次重绘之前执行回调函数,能够更好地与浏览器的渲染机制结合,减少页面的卡顿和闪烁。 的使用方法如下: 在上面的代码中, 方法返回一个唯一的标识符,可以用来取消动画,如下所示: 需要注意的是, 并不一定每秒都会执行 60 次,它会根据浏览器的刷新频率来自动调整执行次数,保证动画的流畅性。同时,由于 是在浏览器的主线程中执行,如果动画计...

#面试
八股文02-14
阅读

为什么函数的 arguments 参数是类数组而不是数组

关键词 :arguments 参数、arguments 参数遍历 在 JavaScript 中,函数的 参数被设计为类数组对象,而不是真正的数组。这是因为 对象包含了函数调用时传入的所有参数,包括未命名的参数。它提供了一种方便的方式来访问和操作这些参数。 要遍历类数组对象,可以使用以下方法: 1. 使用 for 循环和索引:通过使用普通的 for 循环和索引来遍历类数组对象。 2. 使用 for...of 循环: 是特殊的类数组, 因为...

#面试
八股文02-14
阅读

如何冻结一个 JS 对象

关键词 :Object.freeze、Object.freeze作用、深度冻结对象 冻结对象 要冻结一个 JavaScript 对象,以防止别人更改它,可以使用 方法。 方法会递归地冻结一个对象的所有属性,使其变为只读的,并防止更改、删除或添加新属性。以下是使用 方法冻结对象的示例: 在上述示例中,通过调用 方法,将 对象冻结,使其变为只读。此后,无论是更改、删除还是添加属性,都不会对对象产生任何影响。最后,通过 输出对象,可以看到对象...

#面试
八股文02-14
阅读

斐波拉契数列是什么,用 JS 实现,用尾调优化斐波拉契数列

关键词 :斐波拉契数列、尾调优化 斐波那契数列是指:0、1、1、2、3、5、8、13、21、34、……,在数学上,斐波那契数列以如下被以递归的方法定义: F(0) = 0, F(1) = 1 F(n) = F(n 1) + F(n 2) (n 1) 用 JS 实现斐波那契数列可以如下: 这个函数用递归的方式实现了斐波那契数列的求解。但是递归会导致函数栈的不断扩张,当 n 很大的时候会导致栈溢出。所以为了避免这种情况,可以使用尾调用优化。...

#面试
1...161718...47