Javascript 需要了解mergeSort和apply()的帮助

Javascript 需要了解mergeSort和apply()的帮助,javascript,apply,Javascript,Apply,我是js新手,我试图理解这里如何使用apply(最近我一直在努力理解apply)。然而,我的问题是双重的。虽然我了解mergesort的概述,但我不知道最后一块中发生了什么 function mergeSort(items){ if (items.length < 2) { return items; } var middle = Math.floor(items.length / 2), left = items.slice(0,

我是js新手,我试图理解这里如何使用
apply
(最近我一直在努力理解
apply
)。然而,我的问题是双重的。虽然我了解mergesort的概述,但我不知道最后一块中发生了什么

function mergeSort(items){

    if (items.length < 2) {
        return items;
    }

    var middle = Math.floor(items.length / 2),
    left    = items.slice(0, middle),
    right   = items.slice(middle),
    params = merge(mergeSort(left), mergeSort(right));

    // Add the arguments to replace everything between 0 and last item in the array
    params.unshift(0, items.length);
    items.splice.apply(items, params);
    return items;
}
函数合并排序(项目){
如果(项目长度<2){
退货项目;
}
var middle=数学楼层(项目长度/2),
左=项目。切片(0,中间),
右=项目。切片(中间),
参数=合并(合并排序(左),合并排序(右));
//添加参数以替换数组中0和最后一项之间的所有内容
参数取消移位(0,项目长度);
项目.拼接.应用(项目,参数);
退货项目;
}

应用
几乎与
调用
相同

如果您理解
call
apply
只是
call
,但第二个参数是一个参数数组。例如,它们是相同的:

function.call(object, arg1, arg2, ...)
function.apply(object, [arg1, arg2, ...])
我不知道你在最后一个街区不明白什么。但我假设这部分是items.splice.apply(items,params)

这里有一个故障。在js中,函数只是对象。对象可以有函数(或实例方法,就像在许多其他OO语言中一样)


当您执行
项目.splice
时,您所做的只是将手伸入
项目
,然后将
splice
功能拉出(作为对象)。然后使用
apply
调用它。
apply
的第一个参数是您在其上调用的对象。在您的示例中,括号中的
项是调用
splice
函数的项,
params
是一个参数数组。

在这种情况下,调用splice时,params中的值将用作参数。如果有3名成员,电话号码为:

items.splice(params[0], params[1], params[2]);
但是由于事先不知道会有多少成员,因此调用应该是什么样子,apply允许将参数作为数组传递。现在,您不需要知道有多少:

items.splice.apply(items, params);
因此,这一呼吁实际上是:

items.splice(params[0], params[1], params[2], ..., params[n]);

apply还允许对此进行设置,因为它应该是items,所以它作为第一个参数传递。

其中是
merge
?不看它吐出什么,很难解释。毫无疑问,这是一个拼接信号,但是怎么做呢?