刷题记录

12345678910111213141516var twoSum = function (nums, target) { /** * 给定一个整数数组 nums 和一个整数目标值 target, * 请你在该数组中找出 和为目标值 的那 两个 整数, * 并返回它们的数组下标。 */...

设计模式

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题解决方案的核心。这样,你就能一次又一次的使用该方案而不必要做重复劳动。 一般而言,一个模式有四个基本要素: 1.模式名称 2.问题 3.解决方案 4.效果 订阅发布者模式(vue事件)策略模式 定义一系列的算法,把他们封装起来,并且使他们可以相互替换...

被误解的闭包

js 中的闭包是一个非常强大的特性,但是人们对其也有诸多误解。一种耸人听闻听闻的说法是闭包会造成内存泄漏,所以要尽量减少闭包的使用。 局部变量本来应该在函数退出的时候被解除引用,但如果局部变量被封闭在闭包形成的环境中,那么局部变量就能一直生存下去。从这个意义上来看,闭包的确会使一些数据无法及时被销毁。使用闭...

Map 、FlatMap 和 Reduce

Map 作用是生成一个新的数组,遍历原数组,将每个元素拿出来做一些变换后 append 到新的数组中 12[1, 2, 3].map((v) = > v + 1)// -> [2, 3, 4] Map 有三个参数,分别是当前索引元素,索引,原数组。1234['1', '2', '3'].map(par...

Promise 的实现

Promise 是ES6新增的新语法,解决了回调地狱的问题。 可以把Promise看成一个状态机,初始是pending状态, 可以通过函数resolve和reject ,将状态转变为resolved或者rejected状态, 状态一旦改变就不能再次变化。 then函数会返回一个Promise实例, 并且该返回值是...

call apply bind 的区别

首先说一下 call 和 apply 的区别 call 和 apply 都是为了解决改变this的指向。作用都是相同的,只是传参的方式不同。除了第一个参数外,call可以接收一个参数列表,apply只接收一个参数数组。 12345678910let a = { value: 1}fun...

JS中的防抖和节流

防抖你是否在日常开发中遇到一个问题,在滚动事件中需要做个复杂计算或者实现一个按钮的防二次点击操作。 这些需求都可以通过函数防抖动来实现。尤其是第一个需求,如果在频繁的事件回调中做复杂计算,很有可能导致页面卡顿,不如将多次计算合并为一次计算,只在一个精确点做操作。 PS:防抖和节流的作用都是防止函数多次调用。区别在...

计算机通识之网络协议(HTTP)

TCP/IP协议 是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。 关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍 “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义...

计算机通识之网络协议(TCP)

TCP的三次握手为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手 知乎上的一个回答,从另外一个角度阐释: 在Google Groups的TopLanguage中看到一帖讨论TCP“三...

计算机通识之网络协议(UDP)

UDPUDP是一个面向报文的协议,报文其实可以理解为一段段的数据,UDP只是报文的搬运工,不会对报文进行任何拆分和拼接操作。 在发送端,应用层将数据传递给传输层的UDP协议,UDP只会给数据增加一个UDP头,标识一下是UDP协议,然后就传递给网络层了 在接收端,网络层将数据传递给传输层,UDP只去除IP报文头就...