闭包就是一个内嵌函数,在一个函数内部再定义一个函数,那这样定义的话就会有一个问题,函数是有访问的区域的,每个变量都有它的作用域,这个时候在函数内部它又有内嵌函数,那它的作用域是什么样子?
本地变量就是在函数内部定义的,那这个时候你是函数内的函数,那你这个内嵌函数能不能访问你外部函数的变量呢?
在函数内部定义函数有什么意义呢?
我们在一个函数内部定义内嵌函数,可以用来返回这个内嵌函数,为什么要这样返回呢?像上图那样调用之后会有什么好处呢?
第一个就是说,我们返回这个内嵌函数之后,我们函数内部的变量例如b就会保存一份,包括传的参数变量a都会保存一份,也就是说在我们这个内嵌函数当中,还可以再调用这些值,保存一份其实就是增加引用计数。
因为func这时候是一个变量,这个变量指向的其实是一个内嵌函数infunc、是一个闭包,这时候你再给func传一个6进去(这个6赋值给infunc的参数b),会返回一个值a+b。
我们多次调用func这个函数的时候,前面函数outfunc传的值它都一直还在。
如果这个时候我希望在闭包内部直接访问外部函数变量的话,这个时候就会发生错误了,错误提示在infunc函数里面并没有变量a的定义:
这个时候就需要把变量a定义成外部函数变量,这样就可以了: