JavaScript:部分函数,为什么需要处理Array.prototype.slice.call(参数)

JavaScript:部分函数,为什么需要处理Array.prototype.slice.call(参数),javascript,arrays,function,partial,Javascript,Arrays,Function,Partial,我想做一个偏左函数,它将被执行到一个数组中,比如: array_1.map(partial_left1(equal)); function equal(x){return x;} ,但当我将参数的变量推入另一个数组(而不是使用array.prototype.slice.call(参数))时,我崩溃了。因为我想换一种方式,但结果不一样时我很惊讶: var array_1=[1,2,3]; 使用我的方法:结果是:[1,1,1]//仅对数组[0]进行引用 对于数

我想做一个偏左函数,它将被执行到一个数组中,比如:

      array_1.map(partial_left1(equal));
      function equal(x){return x;}
,但当我将参数的变量推入另一个数组(而不是使用array.prototype.slice.call(参数))时,我崩溃了。因为我想换一种方式,但结果不一样时我很惊讶:

      var array_1=[1,2,3];
使用我的方法:结果是:[1,1,1]//仅对数组[0]进行引用

对于数组,prototype.slice.call:[1,2,3]//我想成为什么样的人

这是我的代码,我在其中推送另一个数组中的参数值:

    function concat(arg1,arg2,n){
        for (var i = n; i < arg2.length; i++)
            arg1.push(arg2[i]);
        return arg1;
    }
    function partial_left1(f){
        var argum_apply=[];
        argum_apply=concat(argum_apply,arguments,1);
        return function(){
            argum_apply=concat(argum_apply,arguments,0);
            return f.apply(this,argum_apply);
        };
    }
equal with partial的简单定义:

    var equal_left1=partial_left1(equal);
    var equal_left2=partial_left2(equal);
这是结果,我不知道为什么它们是不同的

    var array_1=[1,2,3];
    alert(array_1.map(equal_left1));//1,1,1
    alert(array_1.map(equal_left2));//1,2,3

一些知道的人请告诉我“Concat”和“Array.prototype.slice.call”之间有什么区别?

一个糟糕的设计决策:
参数
不是数组。它类似于
数组
,从某种意义上讲,它具有
长度
属性

无法调用
参数的
concat
方法,因为它不存在

Array.prototype.slice.call
使用数组中的
slice
方法并调用它——这是一种快速简便的方法,可以将类似
数组的内容转换为正确的数组

如果需要,可以对循环执行相同的操作:

var arr = [];
for (var i = 0; i < arguments.length; i++) {
  arr[i] = arguments[i];
}
var arr=[];
for(var i=0;i
var arr = [];
for (var i = 0; i < arguments.length; i++) {
  arr[i] = arguments[i];
}