前言:
如果想要对一个函数进行装饰,我们可能会想到直接将修饰内容写入函数体内。这样做是没有问题的,但是一个函数一般只做一件事,所以,要想装饰这个函数,应当再定义一个负责装饰的函数。
现在有一个负责打印 Hello,world!的函数,要求对这个函数进行一个简单的介绍,并将介绍以及这个函数的内容(功能)返回给用户。
先自己思考,然后再参考思路以及答案!!!
现在我们来捋一下思路:从题目中我们可以看出,我们肯定要定义一个函数,负责打印 Hello, world!并且结合前言,我们应当再定义一个负责介绍的装饰函数。
但是,在这里,装饰函数只有一个吗?
当然不是,因为一个函数只做一件事,从题目中我们可以看出,这个负责装饰的函数,也有一个明显的分工:一个负责生成一段介绍,一个负责返回这个介绍。
这要怎么办呢?
其实仔细观察上面的分析,不难得出,我们可以用闭包来解决这个问题。
这样,我们的各个函数就有了明确的分工了:
(1)被装饰的函数,负责打印Hello, world!;
(2)负责生成一段介绍的函数;
(3)负责将生成的介绍返回给用户的函数。(2)是(3)的闭包。
于是,这个问题我们就可以这样解决:
其实,上面的代码并不是很优雅,我们可以使用@语法糖修改代码,让它变得更优雅一点儿:
那么什么是语法糖呢?语法糖其实就是一个可以在不影响程序运行的情况下让代码更简洁的助手。毫无疑问,它让我们的代码变得更优雅了。另外,当被装饰的函数有参数时,我们还可以把它的参数传递给装饰函数的闭包 :
在学习之后,一定要多阅读其他人得代码,多思考,并且可以查找相关练习题,巩固所学,不断提高!
我也是一个小白,希望可以和大家共同进步!