找了一些关于这方面的资料,特别是从微软网站里找了一些,发现里面讲解的很肤浅,只有一些例子,弄得我弄不明白到底是怎么回事,搜来搜去 在
http://www.zhihu.com/question/24927450/answer/29473357 找到了“可能是”源代码的代码,分析了一下,感觉有些谬误。现修正并写下来并编辑编辑
Array.prototype.forEach = function (fn,thisArg) {
var that=this;
if(thisArg){
that=thisArg;
}
for (var i = 0,len = that.length; i < len ; i++) {
fn.apply(that,[that[i],i,that]);
}
}
回调函数参数:3个参数(数组第i个值,i,数组本身)
返回值:无
例子:
var example=[“one”,”two”,”three”].forEach(function(value,i,me){
return value;
});
结果为undefined,因为这个方法调用没有return,他只是执行
Array.prototype.map = function (fn,thisarg) {
var that=this;
if(thisarg){
that=thisarg
}
var resultArray = [];
for (var i = 0,len = that.length; i < len ; i++) {
resultArray[i] = fn.apply(that,[that[i],i,that]);
}
return resultArray;
}
回调函数参数:3个参数(数组第i个值,i,数组本身)
返回值:处理后的数组,一一对应
例子:
var example=[“one”,”two”,”three”].map(function(value,i,me){
return value+”|”+i+”|”+me;
});
结果为数组:
0: “one|0|one,two,three”
1: “two|1|one,two,three”
2: “three|2|one,two,three”
Array.prototype.reduce= function (fn,initValue) {
var formerResult ;
if(initValue){
formerResult=initValue
}else{
formerResult= this[0];
};
for (var i = 1,len = this.length; i < len ; i++) {
formerResult = fn.apply(this,[formerResult,this[i],i,this]);
}
return formerResult;
}
回调函数参数:4个参数(前一个值,数组第i个值,i,数组本身)
返回值:处理后的某个值
例子:
var example=[“one”,”two”,”three”].reduce(function(prevous,value,i,me){
return prevous+”|”+value;
});
结果为”one|two|three”
var example=[“one”,”two”,”three”].reduce(function(prevous,value,i,me){
return value;
});
结果为”three”
难理解么,这里结合原型就清楚明白了。我们在这里回调的有四个参数
第一个参数prevous:指的是回调函数上一个处理后的结果
第二个参数指的是当前数组第i个值
第三第四个基本上我们不用。
我们就用第一个和第二个做累加运算。清楚明白没