总结:
-
函数式编程其实是一种编程思想,它追求更细的粒度,将应用拆分成一组组极小的单元函数,组合调用操作数据流;
-
它提倡着 纯函数 / 函数复合 / 数据不可变, 谨慎对待函数内的 状态共享 / 依赖外部 / 副作用;
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
Tips:
其实我们很难也不需要在面试过程中去完美地阐述出整套思想,这里也只是浅尝辄止,一些个人理解而已。博主也是初级小菜鸟,停留在表面而已,只求对大家能有所帮助,轻喷🤣;
我个人觉得: 这些编程范式之间,其实并不矛盾,各有各的 优劣势。
理解和学习它们的理念与优势,合理地 设计融合,将优秀的软件编程思想用于提升我们应用;
所有设计思想,最终的目标一定是使我们的应用更加 解耦颗粒化、易拓展、易测试、高复用,开发更为高效和安全;
void {
this.loading = true;
this.http.request(‘http://jsonplaceholder.typicode.com/posts/1’)
.subscribe((res: Response) => {
this.data = res.json();
this.loading = false;
});
}
调用makeRequest方法时,首先将loading设置为true,即显示加载,在回读回Response时(订阅此时的变化),再将loading显示为false。
#### 3.当请求返回时,使用返回结果中的数据更新this.data
{{data | json}}
这里使用了json管道。
###### 在最后会对管道进行拓展
用json方法提取响应体并解析成一个Object,然后将是这个Object赋值给this.data.
#### 构建一个控制器
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200508093837694.png)
因为之前已经定义了data和loading两个实例变量,所以我们在这个ts中,新建一个同名类,
export class SimpleHTTPComponent
{
data:Object;
loading:boolean;
}
constructor(http: Http)
{
this.http = http;
}
### post请求的基本流程
继续借用刚刚的makeRequest的方法:
makePost(): void {
this.loading = true;
this.http.post(
‘http://jsonplaceholder.typicode.com/posts’,
JSON.stringify({
body: ‘bar’,
title: ‘foo’,
userId: 1
}))
.subscribe((res: Response) => {
this.data = res.json();
this.loading = false;
});
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200508103637865.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjc3NDA0,size_16,color_FFFFFF,t_70)
区域部分为post与get请求的异同,
JSON.stringify将Object转换为一个JSON字符串
### 其他请求 PUT/PATCH/DELETE/HEAD
方法调用类似get post
* delete为例子:
makeDelete(): void {
this.loading = true;
this.http.delete(‘http://jsonplaceholder.typicode.com/posts/1’)
.subscribe((res: Response) => {
this.data = res.json();
this.loading = false;
});
}
### 关于RequestOptions
makeHeaders(): void {
let headers: Headers = new Headers();
headers.append(‘X-API-TOKEN’, ‘ng-book’);
let opts: RequestOptions = new RequestOptions();
opts.headers = headers;
this.http.get(‘http://jsonplaceholder.typicode.com/posts/1’, opts)
.subscribe((res: Response) => {
this.data = res.json();
});
}
>
> append()-在每个匹配元素里面的末尾处插入参数内容
>
>
>
### 关于管道的拓展
### JavaScript
* js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
* 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)
* Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
* JS常见的dom操作api
* 解释一下事件冒泡和事件捕获
* 事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?
* 对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?
* this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?
* call,apply,bind
* 显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链
* 创建对象的多种方式
* 实现继承的多种方式和优缺点
* new 一个对象具体做了什么
* 手写Ajax,XMLHttpRequest
* 变量提升
* 举例说明一个匿名函数的典型用例
* 指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?
* attribute和property的区别
* document load和document DOMContentLoaded两个事件的区别
* JS代码调试
* **[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**
![](https://img-blog.csdnimg.cn/img_convert/a69e7b92af546ecaedf148f129bfef2b.png)