2017-07-21 64 views
0

這是_.initialunderscore.js的代碼:_.initial比它需要在Underscore.js中更詳細嗎?

// Returns everything but the last entry of the array. Especially useful on 
    // the arguments object. Passing **n** will return all the values in 
    // the array, excluding the last N. 
    _.initial = function(array, n, guard) { 
    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); 
    }; 

在我看來,以下將不再繁瑣,相當於:

_.initial = function(array, n, guard) { 
    return slice.call(array, 0, Math.min(0, -(n == null || guard ? 1 : n))); 
    }; 

問這樣一個細節是不出來的地方,因爲underscore.js嘗試保存儘可能多的字節。舉例來說,這個評論:

// Save bytes in the minified (but not gzipped) version: 
    var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; 

是否有更詳細的代碼的原因?

回答

0

我現在看到它在極端情況下有所不同,其中n0。儘管如此,這似乎是一個引人注目的問題。寫出極端情況是沒有用的:_.initial(collection, 0),因爲它相當於collection(給出或認爲是真實的數組)。然而,很可能有些代碼需要改變n可能會使用n = 0的極端情況。