- 博客(15)
- 收藏
- 关注
原创 迭代器(Iterator)和生成器(Generator)
迭代器和可迭代协议redux-saga是建立在ES6的生成器基础上的,要熟练的使用saga,必须理解生成器。要理解生成器,必须先理解迭代器和可迭代协议。迭代类似于遍历遍历:有多个数据组成的集合数据结构(map、set、array等其他类数组),需要从该结构中依次取出数据进行某种处理,有特定的数据结构。迭代:按照某种逻辑,依次取出下一个数据进行处理。迭代器 iteratorJS语言规定,如果一个对象具有next方法,并且next方法满足一定的约束,则该对象是一个迭代器(iterator)。
2021-07-05 00:22:02
290
原创 history库
history对象该对象提供了一些方法,用于控制或监听地址的变化。该对象不是window.history,而是一个抽离的对象,它提供统一的API接口,封装了具体的实现createBrowserHistory 产生的控制浏览器真实地址的history对象createHashHistory 产生的控制浏览器hash的history对象createMemoryHistory 产生的控制内存中地址数组的history对象history对象共同的特点:维护了一个地址栈第三方库:history
2021-06-29 10:22:47
1109
原创 git上线流程
1.本地分支上传远端 git push 2.切换到master主分支。 git checkout master 3.拉取最新 git pull 4.新建分支 merge/日期 先切换 git checkout merge/20210528 切换没有的话新建+切换 git checkout -b merge/20210528 5.合并自己的分支到merge/日期分支(合分支之前必须要保证自己的分支已经发到远端) git merge origin/fe...
2021-06-03 00:17:31
466
原创 State Hook
State Hook State Hook是一个在函数组件中使用的函数(useState),用于在函数组件中使用状态 useState 函数有一个参数,这个参数的值表示状态的默认值函数的返回值是一个数组,该数组一定包含两项 第一项:当前状态的值第二项:改变状态的函数 一个函数组件中可以有多个状态,这种做法非常有利于横向切分关注点。 注意的细节 useState最好写到函数的起始位置,便于阅读useState严禁出现在代码块(判断、循环)中useS...
2021-06-03 00:04:16
116
原创 手写一个instanceof
function instance_of(L, R) { var O = R.prototype; L = L.__proto__; while (true) { if (L === null) return false; if (O === L) return true; L = L.__p...
2021-05-21 12:47:07
51
原创 html5新特征
H5新特征:为了更好地处理今天的互联网应用,HTML5添加了很多新元素(语义化标签,)及功能,比如: 图形的绘制(canvas & svg),多媒体内容(audio vedio),更好的页面结构,更好的形式处理,和几个api拖放元素,定位,包括网页应用程序缓存,存储(localStorage & sessionStorage)语义化标签:标签描述<header></header>定义了文档的头部区域<footer><
2021-04-29 13:01:23
88
原创 防抖和节流
防抖和节流:在给DOM绑定事件时,有些事件我们是无法控制触发频率的。 如鼠标移动事件onmousemove, 滚动滚动条事件onscroll,窗口大小改变事件onresize,瞬间的操作都会导致这些事件会被高频触发。 如果事件的回调函数较为复杂,就会导致响应跟不上触发,出现页面卡顿,假死现象。 在实时检查输入时,如果我们绑定onkeyup事件发请求去服务端检查,用户输入过程中,事件的触发频率也会很高,会导致大量的请求发出,响应速度会大大跟不上触发。针对此类快速连续触发和不可控的高频触发问题,debounc
2021-04-27 18:25:58
71
原创 内联元素的padding和margin
内联元素的padding和margin能设置上吗? 这是我前段时间面试某中厂被问到的一道面试题,一开始有点懵,但照自己的理解是这样回答的:内联元素不能通过改变宽高来改变元素大小,只能通过内部撑开,padding设置不上,margin-left和right可以设置上,margin-top和bottom设置不上。 面试结束后,我感觉自己对这一部分的理解还是存在问题,就一些论坛和官网查了相关问题,结论如下: 1.内联元素的pading-left和padding-right可以设置上,paddi
2021-04-27 16:55:47
856
原创 JS数组原型方法
JS中创建数组有两种方法:(一)使用Array构造函数:new Array() //创建一个空数组new Array(10) //创建一个长度为10的数组new Array(1,2,3) //创建数组为 [1,2,3](二)使用数组字面值创建:let arr1 = [];//创建一个空数组let arr2 = [10] //创建一个一项为10的数组let aee3 = [1,2,3] //创建数组[1,2,3]数组原型方法:join(separator):将数组转化为字符串类型
2021-04-27 08:41:43
328
原创 解析url中的query参数
const url = "https://so.csdn.net/so/search/all?q=query&t=all&p=1&s=0&tm=0"; //测试用例function func(url) { let obj = {} let i = url.indexOf("?") + 1; let str = url.substr(i); let arr = str.split("&") for(let i = 0; i
2021-04-26 22:42:57
2305
原创 数组扁平化方法
let arr = [1, 2, 3, [4, [5, 6]], 7]; //测试用例//递归解决+展开运算符function func(arr) { let result = []; arr.forEach(element => { if (Array.isArray(element)) { result = [...result,...func(element)] } else { res
2021-04-26 21:55:49
56
原创 computed和methods
computed和methods有什么区别?标准而浅显的回答在使用时,computed当做属性使用,而methods则当做方法调用computed可以具有getter和setter,因此可以赋值,而methods不行computed无法接收多个参数,而methods可以computed具有缓存,而methods没有更接近底层原理的回答vue对methods的处理比较简单,只需要遍历methods配置中的每个属性,将其对应的函数使用bind绑定当前组件实例后复制其引用到组件实例中即.
2021-04-24 19:43:09
718
1
原创 HTML基础标签(入门级)
html (hyperText markup language 超文本标记语言)<html></html>:根标签<head></head>: 思想类的东西,编辑给浏览器,看不到的东西<body></body>: 看得到的东西<meta charset = "utf-8">: utf-8(万国码)<title>淘宝网</title><html la..
2021-04-18 00:16:42
432
4
原创 vue数据响应式
响应式数据的最终目标,是当对象本身或对象属性发生变化时,将会运行一些函数,最常见的就是render函数。在具体实现上,vue用到了几个核心部件:ObserverDepWatcherSchedulerObserverObserver要实现的目标非常简单,就是把一个普通的对象转换为响应式的对象为了实现这一点,Observer把对象的每个属性通过Object.defineProperty转换为带有getter和setter的属性,这样一来,当访问或设置属性时,vue就有机会做一些别的事情。这些
2021-04-16 00:03:01
364
原创 v-model
v-model既可以作用于表单元素,又可作用于自定义组件,无论是哪一种情况,它都是一个语法糖,最终会生成一个属性和一个事件当其作用于表单元素时,vue会根据作用的表单元素类型而生成合适的属性和事件。例如,作用于普通文本框的时候,它会生成value属性和input事件,而当其作用于单选框或多选框时,它会生成checked属性和change事件。v-model也可作用于自定义组件,当其作用于自定义组件时,默认情况下,它会生成一个value属性和input事件。v-model虽然很像使用了双向数据绑定的
2021-04-15 20:10:43
111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人