初级前端的面经

初级前端的面经

一、函数节流

通俗来说:用户频繁多次点击只触发一次

let cd = false
function fn(){}
Button.onclick=function(){
    if(cd){
        //
    }else{
        fn()
        cd = true
    let timerId=setTimeout(()=>{
            cd = false
        },3000)
    }
}

二、函数防抖

通俗来说:将多次请求合并一起触发

let timerId = null
Button.onclick=function fn(){
    if(timerId){
        window.clearTimeout(timerId)
    }else{
       timerId = setTimeout(()=>{
          fn(){}
            timerId=null
        },5000)
    }
}

三、手写AJAX

复杂版

const request = XMLHttpRequest()
request.open = ('GET','/xxx')
const request.onreadystatechange=()=>{
    if(request.readyState === 4 && request.statue >= 200 && request.state <300){
        console.log('请求成功')
    }else{
        console.log('请求失败')
    }
    request.send()
}

简化版

const request = XMLHttpRequest()
request.open('GET','/XXX')
request.onload =()=>{console.log('请求成功')}
rrequest.send()

四、ES6语法

  • 问:你所知道的ES6新特性有哪些
    答:我所知道的有let、const、析构赋值,箭头函数、promise

  • 问:let和var的区别
    答:var 存在变量提升,let没有

var a=1
let b=2
console.log(a) //1
console.log(b) //2

将变量声明和打印交换位置

console.log(a) //undefined
console.log(b) //报错
var a=1
let b=2
  • 问:const和let的区别
    答:let声明的变量可以改变,const声明的值不能改变

  • 问:说一下你对Promise的理解
    答:promise是解决异步问题避免回调地狱的统一解决方案
    promise对象接受两个参数,一个resolve和一个reject,成功调用resolve,失败调用reject

function fn(){
   return new promise =(resolve,reject)=>{
        成功调用resolve(数据)
        失败调用reject(error)
  }
}
  • 问:.then的使用方法
    答:promise实例有一个then方法,也就是说then方法是定义在promise原型对象上的,then方法可以接受两个函数作为参数,then方法返回的是一个新的promise,可以链式使用the方法
fn().then(success,fail).then(success2,fail2)
  • 问:promise.catch和try catch的区别
    答:promise.catch是在promise失败之后捕获失败原因,js规定在promise里不能使用try catch来捕获异常

  • 问:promise.property.all的用法
    答:promise.all接受一组promise,全部执行成功之后,返回一个新的promise,否则判定为失败

let p = promise.all[
    promise.resolve(),
    promise2.resolve()
]
  • 问:promise.property.race的用法
    答:promise.race接受一组promise,任意一个执行成功,都会返回一个新的promise,否则判定为失败
let p = promise.race[
    promise.resolve()
    promise.resolve()
]

五、单位

  • 问:em和rem的区别
    答:
    em:根据父元素继承大小
    rem:支持IE9及以上,相对于根元素html的字体大小,不容易造成字体大小混乱,较安全

六、vuex

  • 问:对Vuex的理解
    答:VueX是Vue项目的全局状态管理工具,
    它的几个核心概念是:store(存储数据的容器)、state(状态--类似于vue2的data)、mutation(同步改变状态的方法)、getter(store的计算属性)、action(异步改变状态的方法)、module(将store分割成模块,每个模块都有自己的核心属性)
const moduleA = {
    states : ()=>({ ... }),
    mutations : { ... },
    actions : { ... },
    getters : { ... }
}
const moduleB = {
    states : ()=({ ... }),
    mutations : { ... },
    actions : { ... },
    getter : { ... }
}
const store = new Vuex.store({
    modules:{
      a : moduleA ,
      b : moduleB
  }
})
store.state.a // moduleA的状态
store.state.b // moduleB的状态
  • 问:action和mutation的区别
    Action 类似于 mutation,不同在于:
    Action 提交的是 mutation,而不是直接变更状态。
    Action 可以包含任意异步操作
    mutation 必须同步执行

  • 问:什么Vue修改数据会直接更新到视图上
    答:Vue会对data里声明的属性通过defineProperty方法属性修改为getter和setter类型,Vue通过getter和setter类型监听数据的读写,每当数据变动时,Vue就会重新渲染组件

八:vue-router

  • 问:你是怎么用的Vue-router
    答:Vue-router有三个核心概念,分别是:路由懒加载、导航守卫、history模式
    比较常用的API有:
router-link
router-view
$route.params //用来获取导航的变化
router.replace // 替换掉当前的 history 记录
router.push //当用户点击浏览器后退按钮时,则回到之前的 URL

八、HTML

  • 问:怎么理解HTML语义化
    答:HTML语义化就是用合适的标签来表示相应的内容,比如:我有一个页面,我会用header标签来写抬头,footer标签来写页脚,边部导航用aside标签,文章用artical,段落用section,这样写的好处是增强代码的可读性,和搜索引擎优化

九、uin-app

十、Vue-element组件库

十一、Vue的AJAX--AXIOS

十二、算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 理论基础 js中数组常用的方法有哪些? Array.map():将数组中的每个元素调用一个提供的函数,结果作为一个...
    _Y_X_阅读 3,998评论 0 1
  • 1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文...
    流觞小菜鸟阅读 1,469评论 0 0
  • 1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文...
    上海_前端_求内推阅读 2,750评论 0 1
  • 1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文...
    高磊_IT阅读 5,381评论 0 1
  • 夜莺2517阅读 127,806评论 1 9