前端面试记录

前言:面试题永远是刷不完的,即使刷了一大堆下次面试又忘记了,重要的是组织自己的语言,保持自信,不给自己制造面不过的心理负担,对刷过的题要有个大致印象,好在答题的时候能够多多少少说出点贴近的知识,不至于卡壳,即使错过这家还有下家。

解释下vue中选项式API与组合式API?

vue2的api风格为选项式api,代码配置均已预制,选择配置编写即可

vue3的api风格为组合式api,代码配置需手动引入、手动组合编码

怎么使用webpack减少打包体积?

1.先安装打包代码之后的体积分析工具(webpack-bundle-analyzer),分析下打包代码中谁占用的体积最大

2.通过CDN的方式引入体积较大的依赖包

3.在webpack中的externals配置不需要打包的依赖

注:通过CDN引入的是静态资源,浏览器会进行缓存

uniapp怎么进行分包?

场景:一般微信小程序之类对打包的代码体积都有一个大小限制比如2M,但是我们如果用uniapp去写微信小程序的话很容易就出现一个体积超过2M的限制,所以我们就需要进行一个对代码去进行一个分包打包

1.首先如果是微信小程序之类的需要在mainfest.json中的微信小程序配置开启分包

2.然后再在pages.json里面进行一些分包的配置,主要是subpackages,如分包的根路径root,分包页面pages等等,

此处有些注意事项比如有些页面如tabbar页面不能放在分包内

路由的两种模式?

hash模式

特点:hash 变化不会触发页面请求,仅影响浏览器历史记录

操作方式:

手动修改 window.location.hash

使用 <a href="#/home"> 标签导航

浏览器前进/后退按钮

优点:无需服务器配置,兼容性好

缺点 :URL 中包含 #,美观性差,不利于 SEO

javascript 复制代码
window.addEventListener('hashchange', () => {
  const hash = window.location.hash;
  renderComponentBasedOnHash(hash);
});

history模式

特点 :需后端支持(如 Nginx、Koa 中间件),将所有路径重定向到入口文件(如 index.html),避免直接访问或者刷新页面时子路径时返回 404,直接访问子路径或者在子路径刷新页面会去对应的服务器地址寻找与路由对应的文件,找不到就报404了,而默认情况下或主页面下路径都是192.168.1.1/index.html,刷新页面也没事毕竟是真有这个页面,如果切换了路由就变成了92.168.1.1/routerName,而服务器没有就报错了

操作方式: 调用 history.pushState()history.replaceState() 修改 URL

优点:URL 更简洁,利于 SEO。

缺点:需服务器配合,兼容性稍差(仅支持 IE10+)

javascript 复制代码
window.addEventListener('popstate', () => {
  const path = window.location.pathname;
  renderComponentBasedOnPath(path);
});

路由守卫?

路由守卫一般有三种:全局路由守卫,独享路由守卫,组件的路由守卫

全局路由守卫

有前置、解析、后置三大守卫,执行顺序依次执行

前置:适用场景有权限校验等

javascript 复制代码
router.beforeEach((to, from, next) => {
    next()
})

解析:在所有异步组件和组件内守卫解析后触发,适合确保数据加载完成

javascript 复制代码
router.beforeResolve((to, from, next) => {
    next()
})

后置:导航完成后触发,适用场景有日志记录或页面标题更新

javascript 复制代码
router.afterEach((to, from, next) => {
    
})

局部路由守卫

主要写在路由配置里面用于鉴权

组件路由守卫

beforeRouteEnter、 beforeRouteUpdate、 beforeRouteLeave 分别是组件路由进入、更新、离开时触发

作用域有哪些?

1.全局作用域

2.函数作用域:定义在函数内部,只能函数内部访问的作用域

3.块级作用域:"块"主要指的是"{}",使用`let`和`const`声明的变量具有块级作用域

4.模块作用域:模块主要是指在js里面引入的某个js模块

相关推荐
泓博18 分钟前
Objective-c把字符解析成字典
开发语言·ios·objective-c
try2find21 分钟前
安装llama-cpp-python踩坑记
开发语言·python·llama
青皮桔31 分钟前
CSS实现百分比水柱图
前端·css
失落的多巴胺31 分钟前
使用deepseek制作“喝什么奶茶”随机抽签小网页
javascript·css·css3·html5
DataGear34 分钟前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
影子信息36 分钟前
vue 前端动态导入文件 import.meta.glob
前端·javascript·vue.js
青阳流月37 分钟前
1.vue权衡的艺术
前端·vue.js·开源
样子201841 分钟前
Vue3 之dialog弹框简单制作
前端·javascript·vue.js·前端框架·ecmascript
kevin_水滴石穿42 分钟前
Vue 中报错 TypeError: crypto$2.getRandomValues is not a function
前端·javascript·vue.js
翻滚吧键盘43 分钟前
vue文本插值
javascript·vue.js·ecmascript