00:03
嗯,先说一下,刚才好多同学在这里不太懂。啊,就是为什么我执行完用AA的A级还是前面的对吧,而不是说15,为什么不是15,就感觉就是你你不把A传进去了嘛,对不对,你A传就A不等于了它吗?是这意思吗?是吗?不是,所以说前面我们的准备知识非常关键。其实非常简单一个道理,变量赋值,将一个变量赋值给另外一个变量,是做什么事情,将A的内容,你别管它是D值还是什么值,将A的内容赋值给什么OB比接或者准确的说叫拷贝一份赋值给OB。那就相当于当我一调用,我还没执行函数体的时候,我的这个A存储的值跟这个OB接存储的值是什么一样的值。
01:02
而且我们知道了它存的,现在我们考量它存的内容是什么类型的值。是不是地址值,那既然是地址值,就应该指向同一个对象。是不是,那你说老师到底指向哪个对象呢?那就要看A本身的内容指向的是谁,是不是指向的是他呀。对不对,指向的是这个对象,那也就是说他们俩是不是都指向这个,那现在我下一步是不是执行函数体啊,执行函数体是OB阶,等于了一个什么,是不是等于了一个新的对象,对吧?等于了一个新的对象,是不是将这个对象复制给OB啊,那这个镜子还有吗?没有吧,那我这个地方是不是这么值啊。是不是也就是说执行完了以后,我的A变了吗?我有影响到A所指向的对象吗?没有。
02:07
这里面两个条件,一个是A没有变是吧,另外一个我没有去改变A所指向的一个对象。这要达到两个点才行。因为首先我得找A嘛。是不是要A变呢?是不是结果也会变了?你A没变就代表你的结果没变吗?不是我A接的,是不是点点干嘛去了,刚才说了。你干嘛去?是不是通过这个A找到杀手对应的那块内存的对象啊,是不是找对象去了,接着找到对象里面的什么A级属性的值。那也就是说要想最后不变化,还是以前的这个有两个条件,第一个A变不变。是没有变,第二个我有没有去修改A所指向的对象内容没有,那它就应该是多少,嗯,是不是13,来我们看一下,看他是不是13。
03:14
是吗?事实上吧,是。这个大家应该要去搞清楚。这挺关键的啊,其实。因为像引用变量赋值传递这个是用的特别多的,就搞清楚也很简单啊。来下面呢,我们看另外一个。啊,这个地方经翅在面试中问一个问题,这个参数传递是地址引用传递还是值传递?这个大家其实有我们前面的话东西以后其实很简单是吧,就是直传力。什么意思啊?譬如说我来一个A等于三可以吧,我来一个方形,来个N啊,OK,来一个A。
04:07
好,我在里面搞一个A。等于A加一。可以,不好接着放A好。请告诉我,A现在等于几就没人说是吗?我就不相信这么多人这么牛逼,都直接商啊,你这是你故意的。就坚定不移是三是吧。是什么?是不是三啊,诶,咋三呢?我看着好像是啊,这不是A等于A加一吗?
05:02
这实际上啊,首先我们要知道啊,这是一个变量是吧?这是一个呀,这是不是一个新的变量,能不懂啊,而我A等于A加三,首先读到A的值,A的值是集,也就是说关键的点在这里,在我传递A,我传的是A吗?不是三。这吗是三。那也就是说等我传递完了以后,我跟那个A还有关系吗?你说我后面还能操作那个去改那个A吗?我现在改的是改A吗?跟这个A还有关系吗?没有了吧,我操作的是不是这个三数据啊,能不懂三,也就是说这个A我诶这个地方有点A,我们说第一个第一个变量的操作,它是不是有一块内存,是不这一块内存吧,我有哪些操作。我这内存有了差不多。要不就读,要不就是什么写是吧,那什么时候是图什么时候写。
06:10
能懂我意思不,这个这里你明显看得出来,就是说以这种情况来说,右边这个肯定什么是什么。啊了,这不知道吗?这不读A的值嘛,是不是A,诶读A的值首先得找到这个内存,是不是就读A的,读这个内存的值啊,而A在这里,这里的A呢,是不是往里面写呀。是吧,这一块历程小历程的操作无非不是读就是写吗?那到底什么时候是写了?其实就一种情况,事情就是被赋值,就是在等号的左边。那么呢,其他的都是读。
07:01
其他都是,你说我这里面操作有哪些操作。知道。这个是读完写,读完写,那这里呢。估计也。这里存在两个操作,存在两个操作,第一步,我现在读到A的值。这理子是几三?接着我要将这个三赋值给什么A?只是我先要读这一个A的值。是吧,是不是拿到三了呀,是吧,拿到三了以后将这个三。赋值给下面这个A,我们不是说两个变量都是A吗?是在干什么?我说老师你这搞这么A干嘛,不是故意的?就你得你得知道我其实平常不应该这么,你都名字都差不多对吧,就是故意让你们混淆一下,能看懂吗。
08:06
啊,OK,你一定要知道你对这一个变量的操作到底是读还是写,其实非常简单啊。等号你如果被赋值,也就是在等号的左边,那是不是就是写呀。你说老师这个A怎么在等号的左边我就没看到。它是不是相当于一个隐式的。你是不是调用函数时三复合形态将行时三复实际上写了一个什么语句,A有就说A等于A关系,这两个A是一样的嘛,不一样,这一个A是不是对于外边的这个全局变量,而我左边的这个A对应什么说局变量这个形成变量。那也就是说,虽然都叫同样名字,但是操作是不一样的。这意思吧,嗯。
09:02
啊,这个。要搞清楚我们在JS啊,调用函数传递参数变变量的时候,它传的是值,这没问题啊,这个好做,这个大家都有意清楚,关键的就在哪呢。要分了,好,假设我接受一个F。可以吧,比如说我不计算,我接受OB得了。好嗯,接着O了一个obj等于一个对象可以吧,可以接着name,接着我这个了,来一个来一个to啊,接着最后我调用方案喊什么。是不是OB啊?Mini吧,好,我在里面去打印输出啊,打印输出OB节点name可以打印吧,可不可以可以这个很简单,这个代码倒是非常简单,但是你是不是真正的完全理解还不好说的问题,我们来看一下,那现在我去调用它传了一个obj是吧,那先我要做什么事情。
10:11
先是不是要读到obj的值是吧?读到OB的值,OB间是个什么值?是不是地值,也就是这个对象的地值是吧?接着我做了个什么事情,把它的地值赋值给谁?是不是这个局部变量OB?记住了啊,看到就是我的参数传递,实际上就是一个变量负责另外一个变量。也就相当于A等于BA和B是不是都是变量是吧?那我传递的是什么?不会变的。永远都是B的什么,是不是它内部存储的数据也是B的值,对不对啊,B的值那只是这个值。可能是一个一般的数据,也有可能是一个什么地址数据。
11:07
能不理解啊,OK,那现在我们就应该懂了什么意思了,就有两种理解,理解一,理解一,什么都是。只传递。也就无论你的那个行,那个时参是一个时差数据,时长变量,是一个基本类型的数据,还是一个引用变量,我们传的是不是都是那个变量的内容,以及它的值,这没问题吧,啊,只是这个值啊,这个值。有两种情况,一种是什么基本值?对吧,又是吧,定值能不懂,嗯啊,不管你是引用值,你是一般值还是地值,它都是我们这个变量内部存储的数据吧。
12:08
这是一种。那有人啊,这么理解是怎么个理解你呀啊。就是可能是直传力。也可能是什么呢?引用传递,那他把这个引用传递理解为传递的是什么。他什么情况下是引用传递,是你传的是地址,他就把它认为是个引用传递。能不能理解啊,OK什么意思啊,这个地方就看你把这一个引用传递,看你是怎么个理解法。能理解吧,我最怕就是大家把引用传递理解成理解成一个什么意思呢?就是把这个对象直接。
13:03
搞到这里面去了,是这样的吗?不是。能不能理解,并不是直接将对象给它传递进去了,是这样的吗?不是传的是这个OB接的什么内容,只是它内容是一个什么地址,也就是这个对象的什么地址。嗯,OK。这个为什么要说两种,是因为你去面试的时候,把那个问的人,他可能是这样理解,也可能这么理解,我估计多半是可能这么理解。你要能像我刚才这样把它说清楚,你说一共有两种理解,看你怎么理解。啊,你要跟他说一通,那应该很有威慑力啊,就是你的回答怎么样让面试官觉得有觉得你行有惊喜是吧,就他的答案是不是开始他就知道他准备好的呀?
14:00
他觉得你应该大概回答好,应该回答些什么东西是吧?但是你的回答已经完完全全超过他的预期了,他的巅峰的状态都已经超过了,那你想嘛,要不然的话你就马上走人,要不的话你就马上进去,马上走人,感觉就是你这好像太牛逼了,你感觉还走了,还罩不住你,但这种情况少是吧?这种情况少,如果出现这种情况,那你不应该待在那里,就你的这个水平都已经是是他们工资的顶尖水平了,那怎么可能呢?是吧?有人说万一有可能呢?那得了,那你赶紧走吧,你还带来干嘛呢?啊,OK,好,这是给大家去说的这样的这个概念啊,有两种理解,这两个理解都没问题,但是你要说清楚这个引用传递到底指的是什么。是吧,OK,我们去说都是直传力,你要相比解释,跟你说,你一旦说传力,他马上就问你不对是吧,他觉得有的时候是直传力,有的时候是已用传力。
15:08
你怎么跟人说服,他怎么解释你的传递的理解是什么,就永远传递的是是那个变量的值。是吧,那自然我理解成自算利益很应该啊。这一点毛病都没有。啊,反倒是第二种理解,你的这个引用传递必须说明啊,你这个引用传递实际上指的是传递的是这个变量值,它是个什么递值。嗯。啊,这个也是在面试中经常会被问的,其实也对大家以后写代码非常关键的一个东西。好,这是这一个,嗯,最后还有一个,其实大概都说的差不多了,就是GS引擎的一个如何管,如何进行内存管理啊。
16:03
嗯,首先呢,大家想啊,P的时候举个例子,我们一写啊,写过一个A等于三啊,随便写一个啊,你写了这一个,你他执行你这条语句的时候,是不是要去申请一个分配一片空间的一个小空间,懂不懂先首先第一步要什么啊,开辟空间,我们经常说的是吧,或者叫分配空间可以吧。嗯,分配分配空间,分配空间以后,下面你你只有他分配空间,你是不是才能得到使用权呢?能不能理解得到。啊,这里面写个内存空间吧,啊,分配小内存空间啊,得到它的什么使用权,那得到使用权下一步干嘛。是不是存数据呗,啊存储数据,存储了数据以后是不是可以反复进行操作。
17:04
能不能懂啊,可以反复进行操作,还有一个问题就是什么呢?释放空间。释放空间什么意思?就是把那个使用权是不是交给引擎,你你他可以再付,再次可以进行使用啊,如果我把这个使用权释放掉,我把我把空间释放掉,大家想啊,这个空间是我的当前这个小内存空间啊,这里要记住不是整个空间是吧?是我这个变量所对应的空间,能不能理解啊,OK,释放当前的啊小内存空间,那释放为什么释放。为什么释放,你要不释放的话,那个内存还能别用吗?不能,你是不是老占用着,有一个概念叫占用内存,能听懂吧?好,那我再写一个啊,过一个obj的一个对象,大家想啊,现在我占用了几个空间呢?
18:10
几个三个,一个是AA里面存的是什么,是不是三呐,这是一个懂不懂,我这里面obj是一个是吧,存的是这个对象是不是一个是吧。是不是这个是那正面哪个占的空间最大呀,对象占的空间最大,就我们的重点是不是要将那这个空间给它释放掉啊,而我的这个A和obj能释放吗。我就这么喜欢我,你说我这运行完之后,A和OB间吃完没有。啊,这没什么打印输出,你说我这么刷一下A和O释放没有,就这现在此时空间里面有有没有释放。
19:02
A和OB间,他们内存空间有没有是吧?有没有没有,因为它是全局变量,有人说老师你怎么知道,没错呢。啊。看着我这不有看吧。我现在不A吗?是吧,大看看自己说明什么问题,说明它是不是还在呀,有不懂啊好,这个对象在不在在不在在,为什么说他在啊,你说出小OB结尾,你看这不找来对象了吗?是吧,好,那我做件事情。OB接等于拉现在。现在运行完了以后是什么情况。还有几个空间,占有几个空间。
20:00
个个几个,两个是两个一个关键就是对象被释放,这个很自然回收是吧,这个刚才已经说过了,大家也很容易理解,关键是这个OB间,他这的空间有没有释放,没有没有没有。只是我往里面存的,我现存的什么?那存的浪代表我这空间释放了吗?没有,有人说老师,那你不存浪,你是全外的。释放了吗?也没有,能不能理解这个全局变量啊,你你这么打开着它是不会算的。能理解吧,啊,全局变量和局部变量不一样。就是这个嘛,是吧,啊,假设我握了一个A等于四可以吧,啊,搞一个B吧,等那个说开一点,好记着我去执行这个函数。
21:06
是吧,呃,这个A这个B什么时候存在内存里面去。到23行有没有存到内存里面去,你的内存里面有没有一个变量叫B,它其实是有没有没有。局部变量什么时候产生,是不是函数执行的时候才产生,那它什么时候死亡,是不是函数执行完,它里面所有的局变量占用空间是不是都会自动释放,这个地方我说的是自动释放,是回收吗?回收和自动释放是两码事。回收室是需要垃圾回收器啊,它实际上是密码吗?不是,是在以后面的某一个时刻,垃圾回收器它是一个工作者的一个东西,它不能老在运行,它也得它得有间隔的运行啊,运行会把它休息位,诶发现过一位又发现啊又有一个给它收掉。
22:09
能理解吧,释放是什么一个概念,自动释放就立马咔全部干掉是吧,啊就就就立马干掉了。而回收它是可能中间是有一定的间隔时间,只是这个间隔时间什么非常非常短。能不能理解啊,OK,比如说就举个例子,我这里面来个它,你看我执行完FN以后,我这个B是什么自动释放的。嗯。那么呢?B占用的空间B是自动释放,实际上是说它对应的空间是自动释放的,呃,那个B所指向对象的。垃圾是不是有垃圾回收器在后面的某一个时刻被回收啊?
23:05
能不能懂啊,B所指向的对象是在后面的某个时刻,哎,时刻奇怪了,嗯,十个油,什么垃圾回收器是不是回收是吧,回收啊,释放空间啊,这个大家应该懂,那也就是说是不是也有一个利,即和一个后面的一个过程,它不太一样啊,本质上是不太一样的,只是说这个时间差很小,对于我们编程员来说基本上可以忽略不计。能理解吧,但是如果你想成为一个优秀的程序员,你要知道那里面的细节。
24:01
它们是有区别的。OK,好,这是这个,那也就是说这个释放内存啊,是内容有几种情况是吧,看你是对象还是你的逐变量。猪变亮什么时候是吧?刚才不说了吗?函数执行完是不是自动的能懂吧,啊自动是吧,好还有什么对象,对象什么呢?是吧,首先要成为什么垃圾对象。接着在后面有什么垃圾回收器回收,那我就没有自动这个概念了,是吧。嗯。这要搞清楚。我的大家看到啊,我的全局变量这里面强调是全局变量,它会当前这一次运行,它会释放吗。
25:04
全局变量会释放吗?不会,你因为想让他全局变量释放了,后面没法用了。嗯,这个大家应该能够去把它搞清楚。嗯。那这里面我们就说了两个,一个是GS引擎如何反内存,其实就是主要说生命周期,它的生啊和使中间的一个操作,以及后面的如何来释放内存的两种情况。我天这一上午讲了讲了两个点。
我来说两句