IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 前端学习笔记(一) -> 正文阅读

[JavaScript知识库]前端学习笔记(一)

1.JS中的函数上下文

? ? ? ? 在JS中,函数的上下文是可以变化的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,因此可以通过修改函数上下文来改变函数指向。通过使用call、apply、bind方法来修改this的指向。

function updown( fn,obj){

? ? ? ? return fn.apply(obj); //? return fn.call(obj);? ?// return fn.bind(obj);

}

2.闭包

? ? ? ? 函数闭包是指内部变量可以在外部访问,即函数外部可以访问到内部声明函数变量。闭包打破了变量的作用域规则,变量不会被垃圾回收,但是使用闭包会导致内存泄漏。

3.Vue的生命周期

? ? ? ? Vue的声明周期分为初始化、运行中、销毁三部分。开始创建——初始化数据——编译模板——解析为AST——编译为render函数——挂载DOM——渲染——更新——渲染——销毁一系列过程称之为Vue的生命周期。

????????主要的钩子函数包括创建前;创建(created);挂载前;挂载(mounted);更新前;更新(updated);销毁前;销毁(destoryed)。

? ? ? ? 创建前完成初始化操作,但此时数据还未进行绑定;创建则完成了数据的绑定配置,计算属性及方法的挂载,event事件的回调。

? ? ? ? 挂载前完成页面模板的解析,生成抽象语法树(AST),并将解析后的页面模板存储在内存中;挂载则是将内存中的内容渲染到页面上,实现虚拟DOM树操作,及AST通过编译为render函数将其翻译为虚拟DOM树,渲染在UI页面上。

? ? ? ? 更新前是指数据发生更新时,钩子函数将会被调用,但此时页面中的数据依旧为原来数据,而Vue中的数据已经是最新的,可以进一步更改其状态。更新是发生在数据要更新并在DOM树中渲染后调用的钩子函数。

? ? ? ? 销毁前是指实例被销毁之前调用的钩子函数,但此时实例仍然可用;销毁是在实例被销毁之后调用,此时与Vue帮定的所有都回解绑,监听器移出,子例被销毁。

4.Vue响应式原理

? ? ? ? 所谓响应式就是在页面控制台,改变绑定数据属性值,页面上的内容将随之改变。通过object.defineProperty对数据的属性进行添加或修改。数据绑定是一个一步操作,首先observer监听对象上的所有属性,在属性值改变时触发watcher,然后由其执行回调函数,更新Vue模板上的内容。其中每一个observer对应一个Dep数组,用来保存与observer相关的watcher。

? ? ? ? 在Vue3中使用proxy代替object.defineProperty实现数据的双向绑定,因为proxy可以监听整个对象。

5.diff算法

? ? ? ? 虚拟DOM树中的采用的算法,将树进行层级分解,只比较相同层级节点进行创建和删除操作。在Vue2中,使用深度遍历算法对新旧DOM树进行对比,以便进行页面更新。而在Vue3中将编译器与运行同时进行工作,不在递归遍历DOM树,而是找到动态改变节点结构的模板指令对其进行执行树遍历,以减少虚拟DOM的大部分开销。

6.防抖与节流

? ? ? ? Vue中没有内置防抖与节流,需要使用Lodash库实现,每个组件只使用一次,在methods中直接应用防抖。

<script src="https://unpkg.com/lodash@4.17.20/lodash.min.js"></script>
<script>
  Vue.createApp({
    methods: {
      // 用 Lodash 的防抖函数
      click: _.debounce(function() {
        // ... 响应点击 ...
      }, 500)
    }
  }).mount('#app')
</script>

7.Vue导航守卫

? ? ? ? 导航守卫主要是通过跳转或取消的方式守卫导航,简而言之就是路由跳转过程中的一些钩子函数。导航守卫分为:全局守卫、路由独享守卫、组件内守卫。导航守卫有三个参数:to, from,next.。next为进入下一个管道的钩子。

? ? ? ? (1)全局守卫分为:全局前置守卫,全局解析守卫,全局后置钩子

? ? ? ? 全局前置守卫:在路由刚开始导航且还未进入路由对应的组件中触发。

const router = new VueRouter({ /*...*/ })

router.beforeEach((to, from, next) => {
  // ... // if (...) next(); else next("/login");
})

? ? ? ? 全局解析守卫:在导航被确认之前,同时所有的组件守卫和异步路由组件被解析之后,解析守卫才被调用。

const router = new VueRouter({ /*...*/ })

router.beforeResolve((to, from, next) => {
  // ... 
})

? ? ? ? 全局后置钩子:不会接受next函数也不会改变导航本身。

const router = new VueRouter({ /*...*/ })

router.afterEach((to, from) => {
  // ... 
})

? ? ? ? (2)路由独享守卫:是当组件路由进入时触发的。

const router = new VueRouter({
  routes: [{
      path: "/example",
      component: Example,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }]
})

? ? ? ? (3)组件内守卫分为:组件前置守卫,组件更新守卫,组件离开守卫

? ? ? ? 组件前置守卫:在还没有进入该组件之前触发,渲染该组件的对应路由被confirm前调用。

const Example = {
  template: `...`,
  beforeRouteEnter: function(to, from, next) {
    // ...
  }
}

? ? ? ? 组件更新守卫:动态路由中,切换路由时由于绑定的是同一个组件因此不会重新渲染,在钩子函数中获异步动态路由对应数据,访问实例。

const Example = {
  template: `...`,
  beforeRouteUpdate: function(to, from, next) {
    // ...
  }
}

? ? ? ? 组件离开守卫:导航离开该组件的对应路由时调用,访问组件实例this,

const Example = {
  template: `...`,
  beforeRouteLeave: function(to, from, next) {
    // ...
  }
}

8.父子组件之间的通信方式

? ? ? ? (1)父组件与子组件进行通信是通过v-bind的props属性绑定。

? ? ? ? (2)子组件与父组件之间通信则通过绑定事件$event事件

9.前端跨域问题如何解决

? ? ? ? 跨域解决的是同源问题。同源主要是”协议+域名+端口“只要有一者不同则为不同源。同源策略限制以下行为:

? ? ? ? cookie、LocalStorage和IndexDB无法获取

? ? ? ? DOM和JS对象无法获得

? ? ? ? Ajax请求不能发送。

(1)JSONP解决跨域问题,只支持get请求,适合加载不同域名的js、CSS、img等静态资源。

(2)CORS解决跨域问题,跨域资源共享,适用于Ajax各种跨域请求;

(3)Nignx代理nodejs中间插件跨域原理为搭建一个服务器,直接在服务器上请求http接口,适合前后端分离项目中前端调用后端接口。

(4)document.domain+iframe适合主域相同,子域不同跨域请求。

(5)postMessage是HTML5中XMLHttpRequest Level2中的API,解决页面与新打开窗口之间数据传递,多窗口之间消息传递,页面与嵌套iframe消息传递。

(6)websocket协议为HTML5的新特性,支持服务器与浏览器双向数据传递,使用socketio,很好的封装了websocket接口,支持浏览器向下兼容。

参考地址:https://www.imooc.com/article/291931

10.HTTP状态码

? ? ? ? (1)1开头:被接受,需要继续处理

? ? ? ? (2)2开头:请求成功

? ? ? ? (3)3开头:请求被重定向

? ? ? ? 301重新请求的URL,客户端自动重新请求新的地址;

? ? ? ? (4)4开头:请求错误,客户端看起来可能发生了错误,妨碍了服务器处理。

? ? ? ? 400:错误请求,请求语法不同或不能满足请求;403禁止,即使授权也不需要访问;404找不到给定资源,文档不存在;405:打开方式不对,资源被禁止。

? ? ? ? (5)5开头:服务器错误

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 00:12:45  更:2021-07-28 00:13:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 23:09:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码