前言 僅看 cb 和 optimizeCb 兩個函數(shù)的名字,你可能想不到這是用來做什么的,盡管你可能想到 cb 是 callback 的縮寫。 如果直接講解源碼,你可能想不明白為什么要這么寫,所以我們從 _.map 函數(shù)開始講起。 _.map _.map 類似于 Array....
.... _.each = _.forEach = function(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; if (isArrayLike(obj)) { for (i = 0, length = obj.length; i < l...
...長。 下面的Ctor和_ 是為了面向?qū)ο蠖鴾蕚涞摹?迭代 var optimizeCb = function(func, context, argCount) { if (context === void 0) return func; switch (argCount == null ? 3 : argCount) { case 1: return func...
...context,那么each方法里面的this就會指向window iteratee = optimizeCb(iteratee, context); var i, length; // 如果是類數(shù)組,一般來說包括數(shù)組、arguments、DOM集合等等 if (isArrayLike(obj)) { for (i = 0, length = ...
...,我們可以看到,當傳入的數(shù)據(jù)格式是函數(shù),則需要通過optimizeCb函數(shù)進行統(tǒng)一處理,返回對應(yīng)的回調(diào)函數(shù),下面是underscore中optimizeCb函數(shù)的實現(xiàn): // 回調(diào)處理 // underscore 內(nèi)部方法 // 根據(jù) this 指向(context 參數(shù)) // 以及 argCount 參...
... if (value == null) return _.identity; if (_.isFunction(value)) return optimizeCb(value, context, argCount); if (_.isObject(value)) return _.matcher(value); return _.property(value); ...
... underscore。 接下來是閱讀內(nèi)部函數(shù),其實不多,只有 cb、optimizeCb、restArgs、shallowProperty、deepGet 而已,之所以閱讀這些函數(shù)的實現(xiàn),是因為在讀其他 API 時很可能會接觸到這些函數(shù),我第一次在其他 API 中看到 cb、optimizeCb、restArgs...
...置。類似umd的兼容寫法 _.VERSION = 1.8.3; 記錄版本號 var optimizeCb = function(func, context, argCount) { if (context === void 0) return func; switch (argCount) { case 1: return function(value) { ...
...orEach = function (obj, iteratee, context) { //優(yōu)化回調(diào) iteratee = optimizeCb(iteratee, context); var i, length; // 判斷是數(shù)組還是對象 if (isArrayLike(obj)) { for (i = 0, length = obj.length; i < ...
... //todo })); _.VERSION = 1.8.3; underscore 版本為 1.8.3。 var optimizeCb = function(func, context, argCount) { if (context === void 0) return func; switch (argCount == null ? 3 : argCount)...
...{ // window root._ = _; } 接著看源碼 源碼再往下看,是一個 optimizeCb 函數(shù),用來優(yōu)化回調(diào)函數(shù): var optimizeCb = function(func, context, argCount) { // 這里沒有用 undefined,而是用 void 0 if (context === void 0) return func; // 只...
...用很廣泛,undersocre采用了一個內(nèi)部函數(shù)來處理this: var optimizeCb = function(func, context, argCount) { if (context === void 0) return func; switch (argCount == null ? 3 : argCount) { case 1: return ...
...: _.each = _.forEach = function(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; if (isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++...
...數(shù) if (_.isFunction(oiteratee)) { keys = _.allKeys(obj); iteratee = optimizeCb(oiteratee, context); } 首先 if-else 是不可避免的,如果傳入的第二個參數(shù)是 function,那么就是傳入迭代函數(shù)了,根據(jù) context(this)返回新的迭代函數(shù)(optimizeCb 我以后會....
...ore// functions.// 內(nèi)部復(fù)用函數(shù),用于改變函數(shù)上下文。 var optimizeCb = function(func, context, argCount) { //context為undefined情況下,直接返回func // void 0 // 執(zhí)行過程:1,對右側(cè)表達式求值。2.返回undefined // 為何這樣多此一舉:js.....
ChatGPT和Sora等AI大模型應(yīng)用,將AI大模型和算力需求的熱度不斷帶上新的臺階。哪里可以獲得...
大模型的訓(xùn)練用4090是不合適的,但推理(inference/serving)用4090不能說合適,...
圖示為GPU性能排行榜,我們可以看到所有GPU的原始相關(guān)性能圖表。同時根據(jù)訓(xùn)練、推理能力由高到低做了...