46闭包
调用funB不通过funA:在funA函数中将funB作为返回值给返回
注:将函数作为返回值/参数的话,只需写出名字,不用加小括号函数只在定义和调用时加
此时调用funA得到funB函数的一个引用,用funA()()调用funB
或将它赋给一个变量名加小括号
现象:对于嵌套函数来说外层函数的作用域会通过某种形式给保存下来尽管该函数已经调用完但是外层作用域里的变量是会保存下来的,并不会像局部作用域那样调用完就消失
利用该现象就可以利用嵌套函数来实现来料加工批量生产这个类似工厂的功能
实际开发中闭包的运用:比如游戏开发中我们需要将游戏中的角色移动位置给保护起来
案例:用闭包函数实现角色移动
47装饰器函数
把一个函数作为参数传递给另一个参数
函数的函数名其实就是函数的引用
使用了装饰器,并不用去修改原来的代码,只需在函数的上方@函数名,再正常调用函数
实际开发中常见写代码突然要求做插入日志或添加性能测试或先进行权限验证
本质原理:闭包+拿函数当参数
@+装饰器名字是语法糖(对语言的功能本身没有影响,即用不用都行,但使程序更简洁等
相当于把myfunc函数作为一个参数塞到装饰器里然后去调用该装饰器