Javascript 在函数中检查此长度的含义是什么?

Javascript 在函数中检查此长度的含义是什么?,javascript,functional-programming,this,reduce,Javascript,Functional Programming,This,Reduce,我正在学习一门关于 在练习16中,它向您展示了reduce是如何实际实现的,以帮助您理解如何使用它,但是在这个实现中,有一些我没有真正了解的东西,我将展示代码: Array.prototype.reduce=函数(组合器,初始值){ var计数器,累计值; //如果数组为空,则不执行任何操作 如果(this.length==0){ 归还这个; } 否则{ //如果用户没有传递初始值,请使用第一项。 if(arguments.length==1){ 计数器=1; 累计值=此[0]; } else

我正在学习一门关于 在练习16中,它向您展示了reduce是如何实际实现的,以帮助您理解如何使用它,但是在这个实现中,有一些我没有真正了解的东西,我将展示代码:

Array.prototype.reduce=函数(组合器,初始值){
var计数器,累计值;
//如果数组为空,则不执行任何操作
如果(this.length==0){
归还这个;
}
否则{
//如果用户没有传递初始值,请使用第一项。
if(arguments.length==1){
计数器=1;
累计值=此[0];
}
else if(arguments.length>=2){
计数器=0;
累计值=初始值;
}
否则{
抛出“无效参数”;
}
//循环遍历数组,输入当前值和
//之前的计算返回到组合器函数中,直到
//我们已经耗尽了整个数组,只剩下一个值。
while(计数器<此长度){
累计值=组合器(累计值,此[计数器])
计数器++;
}
返回[累计值];
}
};
表示“在数组原型上创建函数”-这意味着新的
reduce
函数将可在所有数组上调用,例如:

[1, 2, 3].reduce(...
[].reduce(...
这意味着您也可以在空数组上调用它,例如:

[1, 2, 3].reduce(...
[].reduce(...
在评论的基础上:

如果数组为空,则不执行任何操作

您正在处理一个数组,当调用该函数时,
this
被设置为调用
reduce
的数组。
reduce
的这个实现假设,如果该数组是空的(即
This.length==0
),则在逻辑上不能进一步减少它-没有什么可减少的,因此可以返回相同的空数组



正如@Alnitak在评论中指出的那样,
reduce
的这种实现与之相比存在缺陷。对于较旧的浏览器,可以在上使用不同的实现。

这是一个数组。你需要了解原型是如何工作的,它只是说如果这个(数组本身)的长度是0(这意味着里面没有任何东西),那么它应该返回它自己。它会阻止任何其他代码的执行。无需继续,因为无需“减少”它。请查找更好的教程-这是
的错误实现。减少
-如果数组为空(且未提供初始值),它将抛出错误。请参阅Reduce也没有将累加器包装在数组中。@Alnitak实际上,我想教程已经很老了,但它说这不是Reduce的真正实现,只是一个用来理解它如何工作的示例。
。空数组上的Reduce
应该返回初始值,而不是它本身(如果没有初始值,则抛出错误)-参见@Alnitak Thank-添加了一个脚注。我喜欢这个解释,它非常清楚,你能给我举一个例子,说明if语句何时计算为true,何时计算为false吗?@StefanoSaitta我回答的第一个例子将导致
false
-
[1,2,3]。减少(…
-在本例中,长度为3。好了,现在我明白了,谢谢你的回答,我想我需要进一步研究原型是如何工作的。