00:00
做一个事情。到底什么是B包了是吧?你刚才说B包啊,我们先写段代码,你先别看B包是什么啊,我在里面呢,定义一个函数叫FNE1。可以吧,我在这里面,若一个A等于二,可以吧?接着我们在这里面定义一个再定函数,内部函数叫FN2。可以吧,啊也没有问题,好了,接着我在这个里面去输出A,可以吧,没问题。好,接着我执行FN1,但是呢,我内部不执行FN2 FN2不执行。好,先我问一下大家,你说这个输出能输出吗?能不能,不能,我要问他整个过程中这一个函数对象有没有产生。前面的基础很重要,有没有产生产生了。
01:06
对不对,好,我们来看一下总理。关键时刻到了,大家要精神一点啊,来我这样吧,把它换一个,换一个位置啊,这样看起来宽一点,舒服一点啊,把这个去掉。来在这里面呢,我我在这啊,大家看到我在我在这个里面,在这里打个断点。在这里打断点的话,是执行哪一行才会进入这里,是不是执行27行就会进就会到这里来呀,能不懂好来刷一下进来了吧,那进来的时候啊,大家看啊,现在我进来了,进来的时候你说我们现在A存在没有。
02:06
存不存在存在你看嘛,这不A吗。能不懂这一个就有点类似于哪个,这个实际上就是就相当于是什么东西,是不是我们的那个函数执行上下文呢,能懂不啊,这个里面有谁A还有什么F2 FN2是不是已经有知了,因为它是函数生明嘛。能不理解,好,我把它打开。是吧,可以打开吧,可以打开以后大家看呢,再把这一个打开,这里面的这个打开,诶看到一个东西。Close close什么意思?关闭的意思,那close。
03:03
什么就是我们要说的这个东西。B包。好先,现在我们来看一下B包里面到底是个什么。包里有什么?是不是有AA?现在的值是什么?And DeFine。那包到底是一个什么东西呢?啊,现在B胞产生没有产生没有产生了,B包在哪个里面,是不是在我嵌套的内部函数里面,内部函数不是个对象吗。能不理解B包现在在我嵌套的内部函数对象中,那它到底是个什么东西呢?我们能不能把它理解成一个对象?
04:06
可不可以啊,对象里面有什么有什么,是不是有属性,那它为什么有A呢。那是不是因为我们这个内部函数,内部的这个函数是不是引用了外部函数的这个A啊,好,那我要再问大家一下,大家看啊,我假设这个里面有个B。你说那个币包里面会不会有币?有还是没有啊,我们来看一下啊,现在是不是应该就能看见了。有病吗?没有。还挺好。没有,那他到底有些什么属性呢?
05:02
你不推荐吗?你不得总结总结规律吗?对吧,我内部函数引用了外部函数的什么变量,它这个地方我是不是一用了9A,我一用变了吗?没有是不是就没有,也就是说现在我们就要说了,首先我们要说的一个概念如何产生闭包。它是有条件的是吧?产生密包的情况是,当一个嵌套的内部函数引用了什么嵌套的外部函数的变量,这个变量一定是一个一般变量,可不可以是函数啊。这个A的值可不可以是个方形呢?可不可以,可以跟它是什么值有关系吗?没有关系,所以说也有可能是不是函数啊。对不对,因为函数是个特别的变量嘛。
06:00
可以这么理解啊,就产生了什么礼包。大家看我们这里面就产生了一个B包,好,那下面这说的是产,其实这里面在说什么,什么条件就产生B包,什么情况就产生B包,那B包到底是什么东西呢?是不是B包到底是什么呢?这地方就两个理解。有两种理解。啊,OK,这里面理解一。说的是B包是嵌套的内部函数,说白了他说B包就是这个,这就是这个B包。啊,这是一种理解,另外一种理解啊,是包含被引用变量的那个什么。那个对象,那个对象在哪个里面。
07:01
在哪个里面,是不是在这个内部函数里面,刚才咱们看到了吗。看到没有?现在我们是不是一层一层打开的,大家看到我啊,我们这个FN啊。这是不是它所有内部能看的东西,接着我们在这里面把这个一打开,开始是关闭了是吧,把这个打开看到谁啊B包,而这个B包里面有什么是被引用的变量啊。也就是说,说白了你是把B包是看成他了。还是看看他。能理解吧,但是前提大家一定要继续,你跟别人交流时一定要说,我们可以通过Chrome的工具。是不是通过第八个调试的方式来查看。
08:02
能不能理解?能骂啊,OK,那这个地方就说啊。绝大部分人。都是第一种理解。也就是说B包就是那个什么内排数。能理解吧?那再一种理解就是我们刚才说的B包是内部函数中包含那个什么,是不是那个对象,那个对象里面包含了什么东西,被引用的变量,也就是我们当前这个解。Eight。那现在问题你是怎么理解的?嗯,好。这个一定要记住啊,如果你是第二种理解的话,我们我们倾向于第二种理解,第二理解的话,它是存在于是内部函数中。那也就是说,其实理解一也没有什么太大毛病。他们俩是共存的。
09:02
嗯,OK。好,那下面我们说产生B包的条件是什么?首先是不是有两个函数,而且要嵌套啊是吧,接着。要有你就说你光有嵌套就有了吗?不是啊不是啊,要有一个什么是内部函数引用什么外部函数的数据。其实还有一个条件就叫执行外部函数,执行外部函数看到了吗?你说我不执行外部函数产生异包。那不可能,因为我们说那个B包在哪个里面,是不是在内部函数对象里面,是不是,那也就是说至少要产生内部函数对象。是吧?那怎么样产生内部函数对象,执行函数定义?这里面就要说了,前面我们说过一句话。
10:05
执行函数定义是执行函数吗?不是,那你说我这个函数定义什么时候执行调用外排数啊,对不对,那也就是说我一定要调用内盘数吗。要不要不。不需要吧,你说我现在调用那个牌子了吗?没有。是吧,是没有的,那我可不可以调,我可以,比如说我去调用一下,调用一下以后可以让大家看B包看得更清楚啊等一下。大家看着啊,我在这里打个断点,我外面都不打断点了,可以吧,我一刷哎。记进来了吧,好,进来以后大家就看得非常清楚了。看到谁了?是不是closer?
11:03
的里面是一啊,哎,为什么我现在就看到close了呢。我现在在哪个内部。是不是函数内部啊,能不能理解,刚才我是不是在这个,在这个FN2的外部去看啊,那所以我是不是要要把FN2打开,是不是才能看得见。是吧,刚才不我我要打开几层才看得见吗?什么意思,我再跟大家整一遍,大家看到我这里有个大点,这里有个大点。再跟大家说一遍。B包现在产生没有产生,没有产生了吧,那产生的在哪呢?那我是不是得把这个F2给它打开啊是吧,打开以后其实还要打开一层是吧。有没有有了吧,但是一旦哈,我这个把它关起来啊,我把它关起来,我把这个关起来,一旦我按下它。
12:03
什么意思?执行完当前的断点进入什么?下一个断点?会不会进入下一个断点?是不是会啊,此时我是不是进入函数执行,进入F2执行,那此时我直接就看到了什么。Close看到没有看到了,那我直接就看到close看到的情况是个什么样的东西呢?是不是还是这个东西。东西变了吗?没有,其实当次啊,重新赋了是赋了一下值,刚才我们是不是在这看的嘛,开始的A是的是不是。后来是不是复职了?能不能看懂,我来这个要能看懂啊,嗯。大家要记住啊,就是执行函数定义。就会产生什么礼包,这里面要强调强调一个是什么不用调用函数,不用调用函数是不用调用内部函数啊,记住了,外函数要不要调,要你外部盘数要不掉,那肯定就不行。
13:23
你内外部函数不掉,内部函数没法定义啊。能不能懂啊。那么你,嗯,让我换一种定义的方式。不要这么冷。那你说我在82行的时候,B包产生没有,没有,20行B环产生没有,没有,为什么没有。因为这个函数定义在22行,现在这种情况执行没有没有。
14:00
那我们就来看一下。我先刷一下啊。因为那个喊处对象是不是还没创建呢。看懂吧,应该看得懂才行啊,嗯,但是我们还是这种定义方式,也能好说明问题,可以吧,可以,但现在这种搞法其实是没有什么太大意义的。就是这种写法是没有在编程上面是没有什么太大的作用啊,也就是说这个B包是产生了。但没产生实际作用。没有产生什么实际作用,我们现在要写一些能产生实际作用,有一些效果的一些必包啊,利用B包做一些东西。
我来说两句