00:00
Hello,大家好,那这个小节呢,我们来实现一下半的函数。半的函数呢,其实跟Co呢很像。啊,但是呢,跟Co又不太一样,Co呢会执行目标函数,但是B呢,它会创建一个新函数。但是呢,它呢不会去执行函数。这就是B和Co的一个区别,至于参数这一块的话,它们都是相同的。啊,都是呢,接收函数对象以及参数。那么下边的话,我们来看一看最终的一个使用形式。好了,我呢,这里列了两种方式啊,两种形式,第一种形式大家可以先看一下。半往里边传一个函数。传一个对象,然后传递两个实参。然后呢,它会返回一个新函数。新函数执行。啊,然后呢,这个结果的话,它应该是521加十加20。
01:00
所以应该是551。是这么一个情况,而对于下边这个呢。也是一样的,结果呢,也是啊,551,但是呢,你注意观察它的参数。也就是说食参呢,它可以呢,在半调的时候呢,传入。也可以呢,在返回的结果函数当中传入都是可以的。啊,两种形式都行。当然了,这与函数原型上边那个半的方法,它的效果是一样的。啊,他也是在这儿,你可以传,在这儿也可以传。那好,下边的话我们来开始把效果实现一下。首先,先把结构答一答。啊,第一个参数是函数。第二个参数呢,是对象第三个参数,第四个参数啊,后边的参数都是函数运行时的时参。我们用一个函数来表示。那好,这个函数我们说了,它会返回一个新的函数。
02:03
所以我们可以这样来一个function。那返回这个函数呢?它的作用是什么呢?这个函数作用是调用目标函数,并且改变其内部this的指向。那么其实这一块的效果就跟扣。他所做的事情是一样的。所以我们在这儿可以直接执行Co函数。来个扣。第一个参数就是FN。第二个参数就是那个对象,第三个参数就是啊。AGS。当然我们还需要把这个参数呢,就做一下这个。解,展开啊,做一个展开。好了,那完成之后呢,还得做一个返回return一下。那下边我们来看看效果怎么样啊。那么其实这个呢,我们只是针对于谁啊,只是针对于这个效果的,我们先把下边这个先注掉。
03:01
啊参数,然后执行,执行的时候呢,没有传实参,我们这儿呢,也没有写行参。它们两个是对应的。看效果怎么样。好,大家看这。Call is notified说call没有定义。为什么会报这个错误呢?很这个其实很简单,就是因为呢,咱们并没有引入,靠那个文件,咱们把它引入一下。啊,演完之后看效果。好,再看这551没有问题。啊,至于这个tmp我们就先不做解释了,因为咱们已经解释过几次了。好了,完成完成之后咱们先看下边这个,看它好使不好使。保存,然后切过来刷新一下。你发现它不好使。为什么不好使呢?就是其实也比较容易理解啊,你可以看一下FN2。FN2其实就是拿到一个函数。然后呢,你把十和20传进去。
04:03
没有用啊,他这里并没有接收,也没有办法去进行相关的运算。所以说咱们这儿这样的一个效效果呢,目前是不能实现的。那不能实现,咱们想办法。注意观察FN这个函数。他在调的时候是可以传十参的。所以说在声明时呢,我们需要给他传一个行参,做一个接收。大家可以看一下啊。啊,我可以把它做一个接收,接收完毕之后,我们可以把它再传到里边来。这样一来的话呢,我们就把它呢。这个参数。传递给了目标函数,让他去做一个执行。好,先看效果怎么样。切过来,右键刷新一面。您可以看一下550亿没有问题。在这儿呢,同学可能会想说,哎,你这个位置呢,你为什么要放到后边呢?你为什么不放到前边呢?
05:06
这个其实跟B它那个。函数原型上面那个方法,它的特性是直接相关的。也就是说,函数在调用时。啊,这个参数是要靠后的。什么意思呢?我们来举个例子。演示一下。比方说,以A为例。然后对象还是obj,我来个十来个20。然后在这呢做一个接收,FN3等于。然后接下来的话呢,我这样来做FN3括弧三十四十。大家可以看一下我这个,也就是说我在外层调半的时候呢,我传了一个参数。在调FN3这个返回的函数的时候,又传两个参数,来看看这三这几个参数他们最终的一个表现是怎么样子的。
06:01
在这为了看清参数,所以说呢,我们这儿呢,打印一下谁呢,打印一下arguments。这个arguments是获取所有实参的,我们再来看一看它到底是几个参数。切过来右键刷新。看这1234。也就是说我们B在调用时,它的参数是靠前的。而在FN就是这个返回的函数,它在调用时传入的13是靠后的。这是为什么我要把它放到后边的一个原因。那下边的话,我们还是用我们所写的这个去做做一个测验,看结果跟他一样不一样。好,我在这儿呢。把这个参数呢,哎,我再复制一份吧。再复制一份拿下来。把上面这个注掉。这儿呢,我写个FN4。然后这写个十。20。这FN4。
07:01
这是30,这是40。我们对照来看看,这个结果跟他的一样不一样。点开浏点开浏览器刷新页面瞅一眼,你可以看一下。啊,单位的区分开,咱们这换成一个50。右键刷新看一眼。没有问题。大家同学可能会想说,怎么还是551啊哈,这是因为呢,我们运算的时候只是跟谁有关系啊,只是只是跟前边这两个参数有关系。后边这个参数你怎么改都不会影响结果,因为呢,他不参与运算。啊,所以说我们要把。F就是这个返回的函数,它的时参要放到函数运行的这个参数后边。啊,不应该往前面放。好了,这是当前我们对半的函数做了一个实现。
我来说两句