Underscore 是一個JavaScript實用庫,提供了相似Prototype.js的一些功能,可是沒有繼承任何JavaScript內置對象。它彌補了部分jQuery沒有實現的功能,同時又是Backbone.js必不可少的部分。html
Underscore提供了80多個函數,包括經常使用的: map, select, invoke — 固然還有更多專業的輔助函數,如:函數綁定, JavaScript模板功能, 強類型相等測試, 等等. 在新的瀏覽器中, 有許多函數若是瀏覽器自己直接支持,將會採用原生的,如 forEach, map, reduce, filter, every, some 和 indexOf.瀏覽器
Underscore 是一個我堅持看完的js源代碼,他簡單、易懂、實用,細心觀察就會發現,每一個函數都很簡短,做爲開源閱讀源碼,我相信Underscore是不錯的選擇函數
1:大量的這種方法,應該是 方式原始方法被篡改,同時加快運行速度,而言嚴格模式後,也不讓經過arguments.callee 調用相關方法的餓緣由吧測試
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; // Create quick reference variables for speed access to core prototypes. var push = ArrayProto.push, slice = ArrayProto.slice, concat = ArrayProto.concat, toString = ObjProto.toString, hasOwnProperty = ObjProto.hasOwnProperty;
2:void 0,開始還好奇爲啥用void 0,是undefined 的縮寫?後來一打聽才知道,原來undefined在舊版本的瀏覽器中是不能夠被賦值的,而新版本的瀏覽器是能夠被賦值的,爲了準確的判斷,因此就有了void 0ui
_.first = _.head = _.take = function(array, n, guard) { if (array == null) return void 0; if ((n == null) || guard) return array[0]; if (n < 0) return []; return slice.call(array, 0, n); };
3:代碼短小精幹prototype
Underscore 代碼短小精幹沒的說,真是精品調試
除了 eq 這個方法長點外 其餘方法都很短htm
4:遺憾 此次走讀 沒記錄筆記沒調試對象