V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
banxi1988
V2EX  ›  前端开发

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

  •  
  •   banxi1988 ·
    banxi1988 · 2018-07-08 12:00:04 +08:00 · 1319 次点击
    这是一个创建于 2337 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 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)

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:32 · PVG 00:32 · LAX 08:32 · JFK 11:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.