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];
}