摘要:所以經常會在一個源碼中看到寫法吧立即執行函數創建變量,保存全局根變量。
// ================立即執行函數================ // 使用(function(){}())立即執行函數,減少全局變量 // ----????----函數聲明 function (){} 與函數表達式 var funName = function(){}----????---- // function(){}() 結果會返回Uncaught SyntaxError: Unexpected token ( // 因為此處,編譯器會將function當做函數聲明關鍵字去編譯,而(并不可以當做函數名 // (function(){}()) 可以正常執行 // 此處function 被擋住表達式編譯 // ----????----函數聲明 function (){} 與函數表達式 var funName = function(){}----????---- // ~function(){}()/+function(){}()/-function(){}()/!function(){}() // true && function(){}() // 0,function(){} // 以上三種情況下,function都會被當成表達式去編譯。 // 所以經常會在一個源碼中看到~function寫法吧// // ================立即執行函數================ (function(){}( // 創建root變量,保存全局根變量。 // 瀏覽器window // 服務器global,部分虛擬機this // WebWorker中為self // ================&& ||操作================ // 邏輯與&& 的優先級高于 邏輯非|| // 邏輯與&&為斷路邏輯, // 任何一個值var Boolean(var)==false,立即返回var,否則返回最后一個值 // 邏輯非||為短路邏輯, // 任何一個值var Boolean(var)===true,立即返回var,,否則返回最后一個值 // ================&& ||操作================ 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 // 關于surrogate-prototype-swapping是什么的理解: // Ctor就是一個裸函數,本身并沒有什么特別的,特別之處在于用途 // Ctor用于在baseCreate函數中暫存要繼承的原型對象,并構造一個新的對象 var Ctor = function() {}; var nativeCreate = Object.create; // An internal function for creating a new object that inherits from another. // 內部函數,用于構造繼承指定對象prototype的新對象 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. // 創建安全作用域 var _ = function(obj) { //obj在_原型鏈上 if (obj instanceof _) return obj; //不是,構造一個 if (!(this instanceof _)) return new _(obj); //將underscore對象存在_.wrapped屬性上 this._wrapped = obj; }; // Utility Functions // ----------------- // 避免沖突,將原本的_變量重新復制給_ _.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中導出,兼容舊版本 // nodeTyoe用于檢測變量是否為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規范導出 if (typeof define == "function" && define.amd) { define("underscore", [], function() { return _; }); } ))
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103690.html
摘要:加載的模塊會以參數形式傳入該函數,從而在回調函數內部就可以使用這些模塊。異步加載,和,瀏覽器不會失去響應它指定的回調函數,只有前面的模塊都加載成功后,才會運行,解決了依賴性的問題。插件,可以讓回調函數在頁面結構加載完成后再運行。 這次主要是對《高性能JavaScript》一書的讀書筆記,記錄下自己之前沒有注意到或者需要引起重視的地方 第一章 加載和執行 js代碼在執行過程中會阻塞瀏覽...
摘要:它通過數據模型進行鍵值綁定及事件處理,通過模型集合器提供一套豐富的用于枚舉功能,通過視圖來進行事件處理及與現有的通過接口進行交互。 本人兼職前端付費技術顧問,如需幫助請加本人微信hawx1993或QQ345823102,非誠勿擾 1.為初學前端而不知道怎么做項目的你指導 2.指導并扎實你的JavaScript基礎 3.幫你準備面試并提供相關指導性意見 4.為你的前端之路提供極具建設性的...
摘要:書籍如下面向對象編程指南,風格輕松易懂,比較適合初學者,原型那塊兒講得透徹,種繼承方式呢。還有另一件事情是,比如發現自己某個知識點不太清楚,可以單獨去百度。 作者:小不了鏈接:https://zhuanlan.zhihu.com/p/...來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 鑒于時不時,有同學私信問我(老姚,下同)怎么學前端的問題。這里統一回...
摘要:值得注意的是,如果值在前面也就是值小于值,那么值域會被認為是零長度,而不是負增長。 underscore.js源碼加注釋一共1500多行,它提供了一整套函數式編程實用的功能,一共一百多個函數,幾乎每一個函數都可以作為參考典范。初讀的時候,真是一臉懵圈,各種函數閉包、迭代和嵌套的使用,讓我一時很難消化。在這里,我來記錄一下我學習underscore.js的一些發現,以及幾個我認為比較經典...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
閱讀 2321·2021-11-24 10:18
閱讀 3385·2021-09-22 15:35
閱讀 3340·2021-09-13 10:37
閱讀 3766·2021-09-06 15:14
閱讀 2071·2021-09-06 15:02
閱讀 2212·2021-09-02 15:11
閱讀 547·2019-08-30 15:53
閱讀 3075·2019-08-29 16:15