⼀个前端⼯作5年的⼤佬出的⾯试题,看看你可以答对⼏道
JS⾯试题
下⾯代码输出是什么?
function sayHi(){
console.log(name)
console.log(age)
var name ='Lydia'
let age =21
}
sayHi()
undefined 报错(var有变量提升,let没有,所以在使⽤let时候会报错,使⽤前未定义)
下⾯代码输出什么?
const shape ={
radius:10,
diameter(){
return this.radius *2
},
perimeter:()=>2* Math.PI*this.radius
}
shape.diameter()
shape.perimeter()
web前端基础面试题20 NAN (this指向问题,第⼆个是NAN是因为隐式转换,箭头函数中this.radius为undefined所以隐式转换时默认使⽤Number⽅法,最终是NAN)
请问以下程序的输出是?
function Foo(){
var i =0;
return function(){
console.log(i++);
}
}
var f1 =Foo(),
f2 =Foo();
f1();
f1();
旺旺代码生成器在线
f2();
0 1 0 (闭包,两个注意点,保存⽗级作⽤域变量,i++是先使⽤再加)
创建⼀个函数,实现字符串转化为驼峰
var res =/-([a-z])/g
var ss ="ss-qsd-i"
ss = ss.replace(res,(p,v)=>{
console.log(p)
console.log(v)
UpperCase()
})
下⾯代码输出什么?
const promise =new Promise((resolve, reject)=>{
console.log(1)
resolve()
console.log(2)
})
promise.then(()=>{
console.log(3)
})
console.log(4)
1243 (事件循环,注意:promise是同步,上来就执⾏,.then才是执⾏的异步操作。)
GET 和 POST 的区别,何时使⽤ POST?
1. get请求的参数是明⽂的(localhost:8080?id=1)post请求的参数放在request body⾥边所以相对来说,post⽐get要更安全
2. get请求的url的长度由于浏览器和web服务器的限制,所以长度会有限制,但是post的参数没有限制
3. get请求会被浏览器记录(⽐如我常删除历史记录)但是post请求不会。
4. 对参数的数据类型,GET只接受ASCII字符,⽽POST没有限制。
5. GET产⽣⼀个TCP数据包;POST产⽣两个TCP数据包。对于GET⽅式的请求,浏览器会把http header和data⼀并发送出去,服务器响应200(返回数据);⽽对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
6.GET有缓存,POST没有
Vue⾯试题
说说 v-show 和 v-if 的区别
miui 14首批推送机型公布v-if判断是否进⾏DOM节点的创建和销毁,消耗较⼤,⽽v-show是控制css样式(display:none,display:block)。消耗较少,所以当页⾯需要判断是否出现的次数较多时,适合⽤v-show。
vba数组法去重复值Vue 组件间如何通信
$emit props vuex v-model provide inject 浏览器本地存储 ref $children $parent $attr $listener等⽅式
Vue ⽗组件和⼦组件的⽣命周期执⾏顺序(初始化时, ⼦组件 data 更新时)
⽗组件处理⾃⼰的数据 data (beforecreate created) --> 要开始渲染了(beforeMount) --> 解析⼦组件, ⼦组件处理⾃⼰的数据(beforeCreate created)–>⼦组件开始渲染(beforeMount mounted)—>⽗组件渲染完毕(mounted)
⼦组件 data 更新时
⼦组件的⾃⼰的更新:beforeUpdate Updated⽗组件不变(diff算法,虚拟DOM会尽量减少重排重绘)
⽗组件改变⼦组件时:⽗ beforeUpdate ⼦ beforeUpdate Updated ⽗ Updated
Vuex 为什么要分模块并且加命名空间
模块:由于使⽤单⼀状态树,应⽤的所有状态会集中到⼀个⽐较⼤的对象。
当应⽤变得⾮常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。
每个模块拥有⾃⼰的 state、mutation、action、getter、甚⾄是嵌套⼦模块。
命名空间:默认情况下,模块内部的 action、mutation 和 getter 是注册
在全局命名空间的——这样使得多个模块能够对同⼀ mutation 或 action 作出响应
。如果希望你的模块具有更⾼的封装度和复⽤性,你可以通过添加
springer是哪里的出版社namespaced: true
的⽅式使其成为带命名空间的模块。当模块被注册后,
它的所有 getter、action 及 mutation 都会⾃动根据模块注册的路径调整命名。
Vuex 页⾯刷新数据丢失怎么解决
把数据存储到浏览器本地缓存中(LocalStorage,SessionStorage)或者是⼀些其他的第三⽅插件
你都开发过程中做过哪些 Vue 的性能优化
对象层级不要过深,否则性能就会差
不需要响应式的数据不要放到 data 中(可以⽤ Object.freeze() 冻结数据)v-if 和 v-show 区分使⽤场景
computed 和 watch 区分使⽤场景
v-for 遍历必须加 key,key 最好是 id 值,且避免同时使⽤ v-if
⼤数据列表和表格性能优化-虚拟列表/虚拟表格hiddenalbum是什么意思
防⽌内部泄漏,组件销毁后把全局变量和事件销毁
图⽚懒加载
路由懒加载
第三⽅插件的按需引⼊
适当采⽤ keep-alive 缓存组件
防抖、节流运⽤
服务端渲染 SSR or 预渲染
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论