百忙之中(闲着),想抽点时间仔细阅读一下源码,于是选择了Lodash写一个系列。阅读源码的顺序按照loadsh文件的顺序。文档地址:中文文档英文文档源码地址:gayhub第一个函数是chunk,但是在源码中,chunk依赖于slice,所以第一篇从slice开始。_.slice(array,[start=0],[end=array.length])这个函数的作用是对array数组进行切割,从start下标开始到end下标结束,但是不包括end,结果以数组形式返回。并标示:注意:使用该方法代替Array#slice,保证正确返回数组。看起来和原生的javascriptslice没什么区别,那为什么要重写这个函数呢?有几个原因:比原来的slice速度快,测试地址如图:兼容性更好。当IE<9时,它不能转换伪数组对象(如DOM)。下面来看看具体的实现。一行一行看代码:首先是判断array数组是否合法:letlength=array==null?0:array.lengthif(!length){return[]}开始位置start和结束位置end默认值:start=start==null?0:开始结束=结束===未定义?length:end支持负数开始,开始合法性检测:超过数组长度则为0,否则从右往左计数if(start<0){start=-start>length?0:(length+start)}end合法性检查:数组长度超过数组长度如果end为负数,从右往左数end=end>length?length:endif(end<0){end+=length}数组的截尾长度,这里为了速度起见,>>>用来向下取整start向下取整length=start>end?0:((end-start)>>>0)start>>>=0通过循环浅拷贝数组的元素,最后返回letindex=-1constresult=newArray(length)while(++index
