2026-10-22 08:53:19
var和let的区别?let和const的区别:
var和let:var存在变量提升,在变量声明前访问不会报错,只是值为undefined;而let不存在变量提升,在声明前访问会报错(暂时性死区)。var的作用域是函数作用域,在块级作用域中声明的变量会提升到函数顶部;let的作用域是块级作用域,只在声明所在的块级作用域内有效。
let和const:let声明的变量可以重新赋值,而const声明的变量是常量,一旦声明后不能重新赋值(但如果是对象,对象的内容可以修改)。
浏览器事件循环机制:
浏览器中的任务分为宏任务(macro - task)和微任务(micro - task)。宏任务包括setTimeout、setInterval、I/O操作、UI渲染等;微任务包括Promise.then、MutationObserver等。
执行顺序是先执行同步代码,然后执行微任务队列中的所有任务,最后执行宏任务队列中的一个任务,如此循环,即“同步代码 -> 微任务 -> 宏任务”。
SSR有什么用:
SEO优化:服务端渲染(SSR)返回的是完整的HTML页面,搜索引擎爬虫可以直接获取到页面的内容,有利于搜索引擎的收录和排名。
首屏加载速度:客户端渲染(CSR)需要先加载JavaScript文件,然后通过JavaScript动态生成页面内容,而SSR直接返回渲染好的HTML,减少了首屏加载的时间,提高了用户体验。
Promise.all:
Promise.all接收一个Promise对象的数组作为参数,返回一个新的Promise对象。只有当数组中的所有Promise对象都成功时,新的Promise对象才会成功,并将所有Promise对象的结果组成一个数组返回;只要有一个Promise对象失败,新的Promise对象就会失败,并将第一个失败的Promise对象的错误信息返回。
闭包:闭包是指有权访问另一个函数作用域中变量的函数。闭包可以用于创建私有变量、实现函数柯里化等。
返回数组出现次数最多的元素:
可以使用一个对象来记录每个元素出现的次数,然后遍历数组,统计每个元素出现的次数并存储在对象中。最后遍历这个对象,找出出现次数最多的元素。
function findMostFrequentElement(arr) { const countObj = {}; for (const element of arr) { if (countObj[element]) { countObj[element]++; } else { countObj[element] = 1; } } let maxCount = 0; let mostFrequentElement; for (const key in countObj) { if (countObj[key] > maxCount) { maxCount = countObj[key]; mostFrequentElement = key; } } return mostFrequentElement;}手写一个react响应式计数器,计数器大于100出现弹窗:
可以使用React的useState钩子来管理计数器的状态,当计数器的值大于100时,使用alert函数弹出提示框。
import React, { useState } from 'react';function Counter() { const [count, setCount] = useState(0); const increment = () => { setCount(count + 1); if (count + 1 > 100) { alert('计数器大于100了!'); } }; return ( <div> <p>计数器: {count}</p> <button onClick={increment}>增加</button> </div> );}export default Counter;介绍上一家实习的公司:需要简要介绍公司的业务、规模、自己在公司中的实习岗位等信息。
承担了什么样的工作:详细说明在上一家实习公司中具体负责的工作内容,包括参与的项目、完成的任务等。
对着项目问技术实现和开发理解:面试官会针对简历中的项目进行深入提问,了解候选人对项目中使用的技术的掌握程度,以及在开发过程中的思考和解决问题的能力。例如,可能会问项目中某个功能是如何实现的,使用了哪些技术栈,遇到了什么问题,是如何解决的等。