帮你记住 Function.prototype.apply 与 Function.prototype.call 的区别

2018-07-08 12:00:04 +08:00
 banxi1988

在 JS 中 函数是 Function 对象。Function 原型中有 callapply 两个函数对象的实例方法,用来调用此函数(或者说执行此函数。)

以 function 函数对象为例,call 实例方法的调用语法如下:

function.call(thisArg, arg1, arg2, ...)

apply 实例方法的调用语法如下:


function.apply(thisArg, [argsArray])

call 实例方法的调用与 apply 实例方法的调用只是函数执行时参数传递语法有所差别。

以前我经常忘记 applycall 调用的参数的区别。

后来我思考了一下,可以这样记:

apply, array, arguments 这几个都是以 a 开头的单词,这样关联记忆之后就可以很简单的记住 apply 调用时需要传递的参数是一个 array 或者 array-like 的数组

apply 经常用于已有的函数参数是数组的情况,函数的调用场景。 比如。向一个数组 append 另一个数组, 可以使用数组的 push 方法,又因为 push 方法支持多个参数。 arr.push(element1[, ...[, elementN]])

那此时就可以使用 arr.apply(arr,anotherArray) 的方式将 anotherArray append 进 arr 上。 还比如说求数组的最大值。 Math.max.apply(null, nums)

PS: 使用 ES 6 的语法上面的例子也可以不用 apply 转而使用数组解构语法,比如: arr.push(...anotherArray)Math.max(...nums)

1315 次点击
所在节点    前端开发
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/469012

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX