一、高阶函数:分为自定义高阶函数和内置高阶函数
- 1--函数名可以作为参数输入;
- 2--函数名可以作为返回值;
1、自定义高阶函数
![aca89acd81a212c7e71a639894748a7a.png](https://i-blog.csdnimg.cn/blog_migrate/e6f1aff335f5fa923955c0695928de4c.jpeg)
2、内置高阶函数
比较常用的内置高阶函数:sorted、map、filter等
以前文章讲过,详细了解请点击 【万能排序sorted】 和 【对序列做处理mapfilter】
二、闭包函数:必须满足以下三点
- 1--是嵌套函数(在函数中定义另一个函数)
- 2--内部函数引用了外部函数中的变量
- 3--外部函数返回值是内部函数
1、不传参数的闭包函数
闭包模板一:不传参数
![1ceba7c0c3f74f07e0f710e196e3983c.png](https://i-blog.csdnimg.cn/blog_migrate/0b66c58ecd9235e87646dbf726eb67c2.jpeg)
2、传一般参数的闭包函数
闭包模板二:传参数1(非函数做参数)
![e234066c0baeed7200927c65f129b180.png](https://i-blog.csdnimg.cn/blog_migrate/41a342e31c6e442501cdf05812d62518.jpeg)
3、传函数名参数的闭包函数(装饰器)
闭包模板三:传参数2(函数名做参数,就是装饰器)
![1ffe5fea3149d290ce16b3b17ae95881.png](https://i-blog.csdnimg.cn/blog_migrate/5a07c1e5c9bf799600ec575c8b2532e0.jpeg)
三、装饰器:把函数名作为参数传递的闭包函数。
另一种解释:高阶函数是把函数作为参数传递,所以装饰器可以理解为高阶函数和闭包的结合。
- 1--作用:添加额外的功能(有些函数是不能随便改的;很多函数需要增加相同的功能)。
- 2--使用:@装饰器
从最简单模板到最全模板讲解
1、装饰器模板样式一(装饰器无参数,被装饰函数无参数、无返回值)
![d0e0e436b82d42f7dca89c6c15483e54.png](https://i-blog.csdnimg.cn/blog_migrate/b9848ad8c2ff75fbd65e797ee5041d65.jpeg)
2、装饰器模板样式二(装饰器无参数,被装饰函数有参数、无返回值)
![2eb789307cd0f257b50ce0fd811f2697.png](https://i-blog.csdnimg.cn/blog_migrate/bb66cbc33878dbe77e46f323dbe3c961.jpeg)
3、装饰器模板样式三(装饰器无参数,被装饰函数通用参数、无返回值)
![e5928febba0cbb3488ab1fa37154d9de.png](https://i-blog.csdnimg.cn/blog_migrate/676aaf5c1a6d570d4630dc428fbe393f.jpeg)
4、装饰器模板样式四--最通用可以装饰任何函数(装饰器无参数,通用被装饰函数)
![7375de90b235640b1f62cc44478d7c32.png](https://i-blog.csdnimg.cn/blog_migrate/387979631a4ae81c0cba38296528d4cd.jpeg)
5、装饰器模板样式五(装饰器有参数,被装饰函数无参数)
![448553e627ac70fb422893c5f19ee5a1.png](https://i-blog.csdnimg.cn/blog_migrate/e692ba30d83e8052c73d4f27ee7cd1d9.jpeg)
6、装饰器模板样式六(装饰器有参数,被装饰函数有参数)
![6224aa4bf0f6d8285259e7df168c134d.png](https://i-blog.csdnimg.cn/blog_migrate/41b25c8e3306cd9e557248f437af8d12.jpeg)
7、装饰器模板样式七--最通用可以装饰任何函数(装饰器有参数,通用被装饰函数)
![d6ca879636a6317eba3dae9c431ce9dc.png](https://i-blog.csdnimg.cn/blog_migrate/50924feec4c247747bf69e518cf683f7.jpeg)
下篇文章再讲解一下,装饰器类的实现。
如果你喜欢,请点赞、关注或转发哦!感谢支持!