何时使用apply over call,因为我们现在已经扩展了语法?

时间:2017-09-29 17:32:04

标签: javascript ecmascript-6

以下是applycall个功能:

function.apply(context, [args])

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

我们知道applycall之间的difference

  

区别在于apply允许你调用函数   参数作为数组; call需要列出参数   明确。

现在我们已经传播了语法,我们可以轻松使用call执行apply所做的事情:

function.call(context, ...[args])

因此,对于扩展语法,我们何时使用apply而不是call?我很好奇apply函数是否可以退役。

1 个答案:

答案 0 :(得分:3)

考虑到args是类似于数组的迭代,它是

function.call(context, ...args);
// vs
function.apply(context, args);

apply更短。

apply是原生的,因此比传播参数的call更快。浏览器版本之间的差异可能会有所不同(最近的Chrome / V8)或者是激烈的(Firefox,旧的Chrome / V8)。根据具体情况,这种担忧可能被视为初步优化。

浏览器版本之间的结果可能不同,具体取决于扩展语法和arguments的优化的存在。以前类似数组的arguments可能会导致apply中的优化,特别是在V8中。在支持扩展语法的现代引擎中,这不再是一个问题。

如果参数是类似数组但不可迭代,则会出现实际差异。例如,arguments变为可迭代not so long ago...arguments在旧浏览器版本中将失败,即使它们支持扩展语法。因此apply更可取,因为call需要安全设备:

function.call(context, ...Array.from(arguments));
// vs
function.apply(context, arguments);

另一方面,如果参数可迭代但不是类似数组,则存在实际差异。由于apply接受数组喜欢,因此call会更好,而且可能更快:

function.call(context, ...set);
// vs
function.apply(context, [...set]);