成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

underscore.js 源碼學(xué)習(xí) 讀書筆記(一)

lx1036 / 2570人閱讀

摘要:所以經(jīng)常會(huì)在一個(gè)源碼中看到寫法吧立即執(zhí)行函數(shù)創(chuàng)建變量,保存全局根變量。

// ================立即執(zhí)行函數(shù)================
// 使用(function(){}())立即執(zhí)行函數(shù),減少全局變量
// ----????----函數(shù)聲明 function (){} 與函數(shù)表達(dá)式 var funName = function(){}----????----
// function(){}() 結(jié)果會(huì)返回Uncaught SyntaxError: Unexpected token (
// 因?yàn)榇颂?,編譯器會(huì)將function當(dāng)做函數(shù)聲明關(guān)鍵字去編譯,而(并不可以當(dāng)做函數(shù)名
// (function(){}()) 可以正常執(zhí)行
// 此處function 被擋住表達(dá)式編譯
// ----????----函數(shù)聲明 function (){} 與函數(shù)表達(dá)式 var funName = function(){}----????----
// ~function(){}()/+function(){}()/-function(){}()/!function(){}() 
// true && function(){}()
// 0,function(){}
// 以上三種情況下,function都會(huì)被當(dāng)成表達(dá)式去編譯。
// 所以經(jīng)常會(huì)在一個(gè)源碼中看到~function寫法吧// 
// ================立即執(zhí)行函數(shù)================

(function(){}(
    // 創(chuàng)建root變量,保存全局根變量。
    // 瀏覽器window
    // 服務(wù)器global,部分虛擬機(jī)this
    // WebWorker中為self    
// ================&& ||操作================
// 邏輯與&& 的優(yōu)先級(jí)高于 邏輯非||
// 邏輯與&&為斷路邏輯,
// 任何一個(gè)值var Boolean(var)==false,立即返回var,否則返回最后一個(gè)值
// 邏輯非||為短路邏輯,
// 任何一個(gè)值var Boolean(var)===true,立即返回var,,否則返回最后一個(gè)值
// ================&& ||操作================
    var root = typeof self == "object" && self.self === self && self || typeof global == "object" && global.global === global && global || this || {};
    
    // 保存已存在的全局中_變量,以便避免變量沖突
    var previousUnderscore = root._;
    
    // Naked function reference for surrogate-prototype-swapping.
    // https://stackoverflow.com/questions/30496650/what-is-surrogate-prototype-swapping-in-javascript
    // 關(guān)于surrogate-prototype-swapping是什么的理解:
    // Ctor就是一個(gè)裸函數(shù),本身并沒有什么特別的,特別之處在于用途
    // Ctor用于在baseCreate函數(shù)中暫存要繼承的原型對(duì)象,并構(gòu)造一個(gè)新的對(duì)象
    var Ctor = function() {}; 
     var nativeCreate = Object.create;
    // An internal function for creating a new object that inherits from another.
      // 內(nèi)部函數(shù),用于構(gòu)造繼承指定對(duì)象prototype的新對(duì)象
    var baseCreate = function(prototype) {
        if (!_.isObject(prototype)) return {};
        if (nativeCreate) return nativeCreate(prototype);
          //暫存
        Ctor.prototype = prototype;
        var result = new Ctor;
          //銷毀
        Ctor.prototype = null;
        return result;
    };
    
    // Create a safe reference to the Underscore object for use below.
    // 創(chuàng)建安全作用域
    var _ = function(obj) {
        //obj在_原型鏈上
        if (obj instanceof _) return obj;
        //不是,構(gòu)造一個(gè)
        if (!(this instanceof _)) return new _(obj);
        //將underscore對(duì)象存在_.wrapped屬性上
        this._wrapped = obj;
    };
    
    // Utility Functions
    // -----------------
    // 避免沖突,將原本的_變量重新復(fù)制給_
    _.noConflict = function() {
        root._ = previousUnderscore;
        return this;
    };
    
    // Export the Underscore object for **Node.js**, with
    // backwards-compatibility for their old module API. If we"re in
    // the browser, add `_` as a global object.
     // 在nodejs中導(dǎo)出,兼容舊版本
     // nodeTyoe用于檢測(cè)變量是否為HTML元素
    // (`nodeType` is checked to ensure that `module`
    // and `exports` are not HTML elements.)
    if (typeof exports != "undefined" && !exports.nodeType) {
        if (typeof module != "undefined" && !module.nodeType && module.exports) {
            exports = module.exports = _;
        }
        exports._ = _;
    } else {
        root._ = _;
    }

    // AMD registration happens at the end for compatibility with AMD loaders
    // that may not enforce next-turn semantics on modules. Even though general
    // practice for AMD registration is to be anonymous, underscore registers
    // as a named module because, like jQuery, it is a base library that is
    // popular enough to be bundled in a third party lib, but not be part of
    // an AMD load request. Those cases could generate an error when an
    // anonymous define() is called outside of a loader request.
     // AMD規(guī)范導(dǎo)出
    if (typeof define == "function" && define.amd) {
        define("underscore", [], function() {
            return _;
        });
    }

))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103690.html

相關(guān)文章

  • 《高性能JavaScript》(讀書筆記

    摘要:加載的模塊會(huì)以參數(shù)形式傳入該函數(shù),從而在回調(diào)函數(shù)內(nèi)部就可以使用這些模塊。異步加載,和,瀏覽器不會(huì)失去響應(yīng)它指定的回調(diào)函數(shù),只有前面的模塊都加載成功后,才會(huì)運(yùn)行,解決了依賴性的問題。插件,可以讓回調(diào)函數(shù)在頁面結(jié)構(gòu)加載完成后再運(yùn)行。 這次主要是對(duì)《高性能JavaScript》一書的讀書筆記,記錄下自己之前沒有注意到或者需要引起重視的地方 第一章 加載和執(zhí)行 js代碼在執(zhí)行過程中會(huì)阻塞瀏覽...

    moven_j 評(píng)論0 收藏0
  • Backbone.js學(xué)習(xí)筆記

    摘要:它通過數(shù)據(jù)模型進(jìn)行鍵值綁定及事件處理,通過模型集合器提供一套豐富的用于枚舉功能,通過視圖來進(jìn)行事件處理及與現(xiàn)有的通過接口進(jìn)行交互。 本人兼職前端付費(fèi)技術(shù)顧問,如需幫助請(qǐng)加本人微信hawx1993或QQ345823102,非誠(chéng)勿擾 1.為初學(xué)前端而不知道怎么做項(xiàng)目的你指導(dǎo) 2.指導(dǎo)并扎實(shí)你的JavaScript基礎(chǔ) 3.幫你準(zhǔn)備面試并提供相關(guān)指導(dǎo)性意見 4.為你的前端之路提供極具建設(shè)性的...

    FrancisSoung 評(píng)論0 收藏0
  • 如何學(xué)JavaScript

    摘要:書籍如下面向?qū)ο缶幊讨改希L(fēng)格輕松易懂,比較適合初學(xué)者,原型那塊兒講得透徹,種繼承方式呢。還有另一件事情是,比如發(fā)現(xiàn)自己某個(gè)知識(shí)點(diǎn)不太清楚,可以單獨(dú)去百度。 作者:小不了鏈接:https://zhuanlan.zhihu.com/p/...來源:知乎著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 鑒于時(shí)不時(shí),有同學(xué)私信問我(老姚,下同)怎么學(xué)前端的問題。這里統(tǒng)一回...

    light 評(píng)論0 收藏0
  • Underscore.js 1.8.3 學(xué)習(xí)筆記

    摘要:值得注意的是,如果值在前面也就是值小于值,那么值域會(huì)被認(rèn)為是零長(zhǎng)度,而不是負(fù)增長(zhǎng)。 underscore.js源碼加注釋一共1500多行,它提供了一整套函數(shù)式編程實(shí)用的功能,一共一百多個(gè)函數(shù),幾乎每一個(gè)函數(shù)都可以作為參考典范。初讀的時(shí)候,真是一臉懵圈,各種函數(shù)閉包、迭代和嵌套的使用,讓我一時(shí)很難消化。在這里,我來記錄一下我學(xué)習(xí)underscore.js的一些發(fā)現(xiàn),以及幾個(gè)我認(rèn)為比較經(jīng)典...

    springDevBird 評(píng)論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<