call和apply函数的工作流程(重点)

首先介绍一下call和apply方法的工作流程

call的工作流程 

F.call(thisarg,[arg1……]) 

1、先判断F是否为一个函数,如果不是一个函数,那么将抛出TypeError异常。 

2、创建一个内部类型空列表list 

3、然后如果参数除去thisarg外还有其他参数的话,就将这些值添加到list中 

4、Iangthisarg和list作为F内部属性[[Call]]的参数传入调用进行函数的执行操作

apply的工作流程 

F.apply(thisarg,argList) 

1、先判断F是否为一个函数,如果不是一个函数,那么将抛出TypeError异常。 

2、创建一个内部类型空列表list 

3、如果argList为null或者undefined的话不做什么。 

4、否则,就将argList中的成员添加到list中,仅仅是成员,即使argList成员为另一个数组 

5、让thisarg和list作为F内部属性[[Call]]的参数传入调用进行函数的执行操作

call和apply方法的相同点和不同点

1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。

2. 相同点:这两个方法的作用是一样的。

都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。

一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容