加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

中高级前端大厂面试秘籍,为你保驾护航金三银四,直通大厂

发布时间:2019-02-21 01:06:13 所属栏目:优化 来源:佚名
导读:引言 当下,正面临着近几年来的最严重的互联网寒冬,听得最多的一句话便是:相见于江湖~。缩减HC、裁员不绝于耳,大家都是人心惶惶,年前如此,年后想必肯定又是一场更为惨烈的江湖厮杀。但博主始终相信,寒冬之中,人才更是尤为珍贵。只要有过硬的操作和

CSPF: 跨站请求伪造,防护:

  • get 不修改数据
  • 不被第三方网站访问到用户的 cookie
  • 设置白名单,不被第三方网站请求
  • 请求校验

框架:Vue

1. nextTick

在下次dom更新循环结束之后执行延迟回调,可用于获取更新后的dom状态

  • 新版本中默认是mincrotasksv-on中会使用macrotasks
  • macrotasks任务的实现:

    • setImmediate / MessageChannel / setTimeout

2. 生命周期

  • _init_

    • initLifecycle/Event,往vm上挂载各种属性
    • callHook: beforeCreated: 实例刚创建
    • initInjection/initState: 初始化注入和 data 响应性
    • created: 创建完成,属性已经绑定, 但还未生成真实dom
    • 进行元素的挂载: $el / vm.$mount()
    • 是否有template: 解析成render function

      • *.vue文件: vue-loader会将<template>编译成render function
    • beforeMount: 模板编译/挂载之前
    • 执行render function,生成真实的dom,并替换到dom tree
    • mounted: 组件已挂载
  • update:

    • 执行diff算法,比对改变是否需要触发UI更新
    • flushScheduleQueue

      • watcher.before: 触发beforeUpdate钩子 - watcher.run(): 执行watcher中的 notify,通知所有依赖项更新UI
    • 触发updated钩子: 组件已更新
  • actived / deactivated(keep-alive): 不销毁,缓存,组件激活与失活
  • destroy:

    • beforeDestroy: 销毁开始
    • 销毁自身且递归销毁子组件以及事件监听

      • remove(): 删除节点
      • watcher.teardown(): 清空依赖
      • vm.$off(): 解绑监听
    • destroyed: 完成后触发钩子

上面是vue的声明周期的简单梳理,接下来我们直接以代码的形式来完成vue的初始化

  1. new Vue({}) 
  2.  
  3. // 初始化Vue实例 
  4. function _init() { 
  5.      // 挂载属性 
  6.     initLifeCycle(vm)  
  7.     // 初始化事件系统,钩子函数等 
  8.     initEvent(vm)  
  9.     // 编译slot、vnode 
  10.     initRender(vm)  
  11.     // 触发钩子 
  12.     callHook(vm, 'beforeCreate') 
  13.     // 添加inject功能 
  14.     initInjection(vm) 
  15.     // 完成数据响应性 props/data/watch/computed/methods 
  16.     initState(vm) 
  17.     // 添加 provide 功能 
  18.     initProvide(vm) 
  19.     // 触发钩子 
  20.     callHook(vm, 'created') 
  21.          
  22.      // 挂载节点 
  23.     if (vm.$options.el) { 
  24.         vm.$mount(vm.$options.el) 
  25.     } 
  26.  
  27. // 挂载节点实现 
  28. function mountComponent(vm) { 
  29.      // 获取 render function 
  30.     if (!this.options.render) { 
  31.         // template to render 
  32.         // Vue.compile = compileToFunctions 
  33.         let { render } = compileToFunctions()  
  34.         this.options.render = render 
  35.     } 
  36.     // 触发钩子 
  37.     callHook('beforeMounte') 
  38.     // 初始化观察者 
  39.     // render 渲染 vdom,  
  40.     vdom = vm.render() 
  41.     // update: 根据 diff 出的 patchs 挂载成真实的 dom  
  42.     vm._update(vdom) 
  43.     // 触发钩子   
  44.     callHook(vm, 'mounted') 
  45.  
  46. // 更新节点实现 
  47. funtion queueWatcher(watcher) { 
  48.     nextTick(flushScheduleQueue) 
  49.  
  50. // 清空队列 
  51. function flushScheduleQueue() { 
  52.      // 遍历队列中所有修改 
  53.     for(){ 
  54.         // beforeUpdate 
  55.         watcher.before() 
  56.           
  57.         // 依赖局部更新节点 
  58.         watcher.update()  
  59.         callHook('updated') 
  60.     } 
  61.  
  62. // 销毁实例实现 
  63. Vue.prototype.$destory = function() { 
  64.      // 触发钩子 
  65.     callHook(vm, 'beforeDestory') 
  66.     // 自身及子节点 
  67.     remove()  
  68.     // 删除依赖 
  69.     watcher.teardown()  
  70.     // 删除监听 
  71.     vm.$off()  
  72.     // 触发钩子 
  73.     callHook(vm, 'destoryed') 

3. 数据响应(数据劫持)

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读