ruixue0702

Results 36 comments of ruixue0702

什么是无状态和数据不可变? 1. 无状态:每次请求都是一个全新的开始,与之前的请求结果没有任何关系,都不会对新的请求有任何的影响 2. 数据不可变:数据一旦被创建了,就不会再更改了;当需要对展现的数据做改变的时候,可以通过es6的结构赋值,复制到新的对象中,再对新的对象进行引用

解释一下科里化和组合 1.柯里化函数:一种由需要多个参数的函数转化为一次只接受一个参数的函数,并且通过使用第一个参数并返回一系列函数直到所有的参数都已被收集 const add = a => b => a + b; 2. 组合 :在函数中创建了一个管道,把一个函数的输出与下一个函数的输入连接起来 const compose = (f, g) => f(g(x)) 3. 柯里化函数对于函数组合非常有用,因为由于函数组合的需要,你可以把 n 元函数轻松地转换成一元函数形式:管道内的函数必须是单一参数

TS中any与unkonow与never类型都是什么 ? any || unknown —— 顶层类型 never —— 底层类型 any(不建议): 任意类型,包含了Javascript中的所有类型的值 unknown: 未知类型,可以接受任意类型的值(可以把 unknow 理解为是安全的 any 类型) never: 不包含任何类型的值的类型(所有类型的子类型,可以赋值给任何其他类型,但是任何类型都不能赋值给never)

TS中的泛型是什么应用场景? 泛型函数:可以适用于多个类型,同时又能够保证参数类型与返回值的类型一致 ``` // 类型变量T —— T帮助捕获传入的类型 function identity(arg: T): T { return arg; } ``` 泛型函数的使用: 传入所有的参数,包含类型参数 let output = identity("myString") 编译器会根据传入的参数自动地帮助我们确定T的类型 let output = identity("myString") 编译器可以查看myString的值,然后把T设置为它的类型 泛型变量: 把泛型变量T当做类型的一部分使用,而不是整个类型,增加了灵活性...

TS中什么是索引类型? 索引类型可以约束对象属性的查询和访问 配合泛型约束能够建立对象,对象属性,属性值之间的约束关系 ```js function getValues(obj: T, keys: K[]): T[K][] { return keys.map(key => obj[key]) } ``` 目的:从obj对象中抽取的属性数组keys中的元素,一定得是obj对象中的属性 实现思路: - 定义泛型变量T, K,分别约束obj对象和keys数组 - 为K增加一个泛型约束,使K继承Obj的所有属性的联合类型, 即`K extends keyof T` - 此时,函数返回值类型-数组的元素类型,就是属性K对应的数组,即`T[K][]`

TS中的元组和枚举类型的作用 元组起源于函数编程语言, 元组合并了不同类型的对象 当直接对元组类型的变量进行初始化或者赋值的时候,需要提供所有元组类型中指定的项 当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型 枚举(Enum)类型用于取值被限定在一定范围内的场景

谈谈Promise与有限状态机的关系 有限状态机: - 简称状态机, - 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型 - 作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件 - 在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件工程,编译器、网络协议、和计算与语言的研究 Promise的本质是有限状态机: - 有三个状态 pending,fulfiled,rejected - 每个状态都将接收各种事件然后执行转换并在转换后执行相对应的动作

编写 loader 时应该遵循以下准则: 简单易用。 使用链式传递。 模块化的输出。 确保无状态。 使用 loader utilities。 记录 loader 的依赖。 解析模块依赖关系。 提取通用代码。 避免绝对路径。 使用 peer dependencies。

html5 是超文本标记语言的第五次重大修改 增加了audio、video 多媒体标签,支持 svg、canvas 展示图形, 增加了 sessionStorage、localStorage 进行缓存, 可以获取地理位置,可以实现拖放功能,可以对标签添加编辑属性 以及一些语义化的标签

解释一下JS中的异步IO、回调、Eventloop ? 异步IO:异步 IO 是计算机操作系统对输入输出的一种处理方式 发起 I/O 请求的线程不等 I/O 操作完成,就继续执行后面的代码 I/O 结果用其他方式通知发起 I/O 请求的程序 回调:回调是一个可以作为参数传给另一个函数(高阶函数)执行的函数 回调函数有两种:同步和异步 同步回调是阻塞的 异步回调是非阻塞的 Eventloop:在一个事件循环中,异步事件返回结果后会被放到一个任务队列中 根据异步事件的类型,会被分到对应的宏任务队列或者微任务队列中 同一次事件循环中,微任务永远在宏任务之前执行 宏任务:setInterval()、 setTimeout() 微任务:new Promise()