前端面试记录

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

解释下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模块

相关推荐
灰海2 分钟前
vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)
前端·javascript·vue.js·heatmap·heatmapjs
2301_770373736 分钟前
Java集合
java·开发语言
王源骏31 分钟前
LayaAir鼠标(手指)控制相机旋转,限制角度
前端
啊?啊?38 分钟前
18 从对象内存到函数调用:C++ 虚函数表原理(继承覆盖 / 动态绑定)+ 多态实战
开发语言·c++·多态原理
bkspiderx44 分钟前
C++标准库:文件流类
开发语言·c++
大虾写代码44 分钟前
vue3+TS项目配置Eslint+prettier+husky语法校验
前端·vue·eslint
wordbaby1 小时前
用 useEffectEvent 做精准埋点:React analytics pageview 场景的最佳实践与原理剖析
前端·react.js
siy23331 小时前
[c语言日记] 数组的一种死法和两种用法
c语言·开发语言·笔记·学习·链表
上单带刀不带妹1 小时前
在 ES6 中如何提取深度嵌套的对象中的指定属性
前端·ecmascript·es6
excel1 小时前
使用热力贴图和高斯函数生成山峰与等高线的 WebGL Shader 解析
前端