javascript:call()与apply()的区别

本文详细解释了JavaScript中apply和call方法的区别与用法。两者均可改变函数内部this的指向,但参数传递方式不同:apply接受参数数组,call则需逐一列出参数。文章通过实例展示了如何使用这两种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资料来源:《javascript高级程序设计》

很是无聊,我又要来浑水,今天讲的还是基础篇,是关于apply的与call的区别。

先统筹下:

apply

每个函数都包含两个非继承而来的方法: apply() 和 call() 。这两个方法的用途都是在特定的作
用域中调用函数,实际上等于设置函数体内 this 对象的值。首先, apply() 方法接收两个参数:一个
是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例,也可以是
arguments 对象。例如:
function sum(num1, num2){
return num1 + num2;
}
function callSum1(num1, num2){
return sum.apply(this, arguments); // 传入 arguments 对象
}
function callSum2(num1, num2){
return sum.apply(this, [num1, num2]); // 传入数组
}
alert(callSum1(10,10)); //20
alert(callSum2(10,10)); //20
在上面这个例子中, callSum1() 在执行 sum() 函数时传入了 this 作为 this 值(因为是在全局
作用域中调用的,所以传入的就是 window 对象)和 arguments 对象。而 callSum2 同样也调用了

sum() 函数,但它传入的则是 this 和一个参数数组。这两个函数都会正常执行并返回正确的结果。

其实这个很简单,不用多说,基本就是调用方法而已(js有四种调用)

call

call() 方法与 apply() 方法的作用相同,它们的区别仅在于接收参数的方式不同。对于 call()
方法而言,第一个参数是 this 值没有变化,变化的是其余参数都直接传递给函数。换句话说,在使用
call() 方法时,传递给函数的参数必须逐个列举出来,如下面的例子所示。
function sum(num1, num2){
return num1 + num2;
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20


在使用 call() 方法的情况下, callSum() 必须明确地传入每一个参数。结果与使用 apply() 没有
什么不同。至于是使用 apply() 还是 call() ,完全取决于你采取哪种给函数传递参数的方式最方便。
如果你打算直接传入 arguments 对象,或者包含函数中先接收到的也是一个数组,那么使用 apply()
肯定更方便;否则,选择 call() 可能更合适。(在不给函数传递参数的情况下,使用哪个方法都无所
谓。)

最后再多说一句:

事实上,传递参数并非 apply() 和 call() 真正的用武之地;它们真正强大的地方是能够扩充函数赖以运行的作用域。

这个才是重点,但是很明显不是在今天的范围

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值