JavaScript中的call()和apply()

it2022-05-09  27

昨天刚做了阿里的前端在线笔试题,其中有一道填空题如下

function func(){ alert(this.valueOf()); } func._________; //期望结果是abc

一开始看到这个题,就想到了call()和apply()方法,但无奈对这两个方法的的用法只是有个模糊的记忆。

于是,就针对这道题,自己对call()和apply()的用法进行了进一步的资料查阅和理解,在此记录一下以便加深印象,也便于以后查找。

作用:

在特定的作用域中调用函数。也就是设置函数体内this对象的值。

用法:

call()和apply()都接受两个参数:一个是在其中运行函数的作用域,另一个是传递的参数。

两者的主要区别在于:接收参数的方式不同。其中call()在接收参数时,参数必须一一列出;而apply()接收的参数必须是参数数组,可以是Array的实例,也可以是arguments对象。例如:

function sum(num1,num2){ return num1+num2; } function applySum1(num1,num2){ return sum.apply(this,arguments); //传入arguments对象 } function applySum2(num1,num2){ return sum.apply(this,[num1,num2]); //传入数组 } function callSum(num1,num2){ return sum.call(this,num1,num2); //传入参数一一列出 }

至于是使用call()还是apply(),完全取决于你采取哪种给函数传递参数的方式最方便。

所以一开始提到的填空题的答案也不唯一,这里就给出以下两种:

func.call("abc"); func.apply("abc");

 

转载于:https://www.cnblogs.com/huangyx/p/4742296.html

相关资源:javascript中call和apply的用法示例分析

最新回复(0)