js apply()、call() 使用参考

引入求一个数组的最大值有这么一种快捷方法:Math.max.apply(null,arr);

image

但是最初看 JavaScript高级程序设计 的时候没看懂原文(斜体表示)如下:

每个函数都包含两个非继承而来的方法: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

现在大概是理解了所以来解释下比如

sum.apply(this, arguments);

实际上的意思是:

1、在 this 环境下执行 sum(arguments);

2、如果 sum 函数内有 this用传入的 this 参数代替 sum 函数内的 this ;

放到这里

var arr=[1,3,4];
Math.max.apply(null,arr);

实际上的意思是:

1、在 null 环境下执行 Math.max(arr);
2、如果 Math.max 函数内有 this用传入的 this 参数代替 函数内的 this ;

第1点再解释下传 null 或 undefined 时将是 JS 执行环境的全局变量浏览器中是 window其它环境(如node)则是 global 。

但是在全局环境下执行Math.max([1,3,4]); 也还是报错的实际上这里是把 arr 里的项作为参数传进去的最终是

//全局环境下执行 
Math.max(1,3,4);

如果这里传入的不是数组是 arguments 对象也是可以的什么是 arguments 对象呢测试一下就是这样:

image

你传入的参数在函数内部都可以通过 arguments 对象获得的;

关于 call 方法书上这么写的:

call() 方法与 apply() 方法的作用相同它们的区别仅在于接收参数的方式不同。对于 call() 方法而言第一个参数是 this 值没有变化变化的是其余参数都直接传递给函数。换句话说在使用 call()方法时传递给函数的参数必须逐个列举出来;

这里就不举例了应该好理解了;

转载于:https://www.cnblogs.com/xianshenglu/p/8044040.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值