建立一個新數組,將array與任何數組 或 值鏈接在一塊兒es6
自行實現數組
concat:function(){ let length = arguments.length let result = [] if(!length) { return result } for(let i = 0;i<argu.length;i++) { result = result.concat(argu[i]) } return result }
lodash 實現函數
function concat() { var length = arguments.length; if (!length) { return []; } var args = Array(length - 1), array = arguments[0], index = length; while (index--) { args[index - 1] = arguments[index]; } return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); }
因爲參數的數量不肯定 因此首先想到函數免費贈送的一個參數 arguments。這點和官方的想法是同樣的 。arguments是一個包含了全部參數的類數組對象,好比說第一個參數能夠經過arguments[0]獲取。
可是arguments參數有一個很詭異的地方,沒法在箭頭函數內使用,只能在普通的function內使用。
多是和 this 同樣的緣由,因爲箭頭函數的緣由,指向了父級做用域。this
而後最後那裏,我是用了es6提供的原生concat方法。lodash用到了他本身實現的一些方法,後面再看是什麼東西。google
剛剛google的時候都在說es6的新特性 rest 能夠替代有不少缺陷的arguments(好比說不是真正的數組,沒法在嚴格模式和箭頭函數內使用)rest
ES6 引入 rest 參數(形式爲...變量名),用於獲取函數的多餘參數,這樣就不須要使用arguments對象了。rest 參數搭配的變量是一個數組,該變量將多餘的參數放入數組中。根據rest concat()函數能夠改爲下面這種形式code
concat:(...p) =>{ let length = p.length let result = [] if(!length) { return result } for(let i = 0;i<p.length;i++) { result = result.concat(p[i]) } return result }
美滋滋對象