javascript中關於匿名函式高階介紹
下面介紹一下比較常用的js中對於匿名函式的封裝,比如jQuery 封裝、Backbone 封裝、Underscore 封裝。建立一個自呼叫匿名函式,設計引數window,並傳入window物件。
而這個過程的目的則是:
使得自身的程式碼不會被其他程式碼汙染,同時也可以不汙染其他程式碼。
一.jQuery 封裝:
jQuery1.7.1裡面的封裝程式碼大致是下面這樣,當然隨著版本的提升或許會有所改變。
程式碼如下:
[JavaScript] 純文字檢視 複製程式碼(function( window, undefined ) { window.jQuery = window.$ = jQuery; if ( typeof define === "function" && define.amd && define.amd.jQuery ) { define( "jquery", [], function () { return jQuery; } ); } })( window );
我們就可以在window中呼叫jQuery,如下兩種方式都是可以的:
[JavaScript] 純文字檢視 複製程式碼window.$ window.jQuery
於是我們就可以建立一個類似的封裝:
[JavaScript] 純文字檢視 複製程式碼(function(window, undefined) { var PH = function() { } })(window)
相比於上面只是少了兩步
(1).定義jQuery的符號及全域性呼叫。
(2).非同步支援。
於是找了下更早期的jQuery的封裝,方法上大致是一樣的,除了如下:
[JavaScript] 純文字檢視 複製程式碼if (typeof window.jQuery == "undefined") { var jQuery = function() {}; if (typeof $ != "undefined") jQuery._$ = $; var $ = jQuery; };
很神奇的判斷方法,以致於沒有辦法重寫上一步的jQuery。
只好看看最新的jQuery的封裝是怎樣的,發現除了加了很多功能以外,基本上思想還是不變的
[JavaScript] 純文字檢視 複製程式碼(function(global, factory) { if (typeof module === "object" && typeof module.exports === "object") { module.exports = global.document ? factory(global, true) : function(w) { if (!w.document) { throw new Error("jQuery requires a window with a document"); } return factory(w); }; } else { factory(global); } }(typeof window !== "undefined" ? window : this, function(window, noGlobal) { var jQuery = function() { console.log('jQuery'); }; if (typeof define === "function" && define.amd) { define("jquery", [], function() { return jQuery; }); }; strundefined = typeof undefined; if (typeof noGlobal === strundefined) { window.jQuery = window.$ = jQuery; }; return jQuery; }));
在使用瀏覽器的情況下
[JavaScript] 純文字檢視 複製程式碼typeof module ="undefined"
所以上面的情況是針對於使用Node.js等的情況下判斷的,這也表明jQuery正在變得臃腫。
二.Backbone 封裝:
[JavaScript] 純文字檢視 複製程式碼(function(root, factory) { if (typeof define === 'function' && define.amd) { define(['underscore', 'jquery', 'exports'], function(_, $, exports) { root.Backbone = factory(root, exports, _, $); }); } else if (typeof exports !== 'undefined') { var _ = require('underscore'); factory(root, exports, _); } else { root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$)); } }(this, function(root, Backbone, _, $) { Backbone.$ = $; return Backbone; }));
除了非同步支援,也體現了其對於jQuery和underscore的依賴
[JavaScript] 純文字檢視 複製程式碼define(['underscore', 'jquery', 'exports'], function(_, $, exports) { root.Backbone = factory(root, exports, _, $); });
表明backbone是原生支援requirejs的。
三.Underscore 封裝:
Underscore,發現這個庫又佔用了一個符號 _
[JavaScript] 純文字檢視 複製程式碼(function() { var root = this; var _ = function(obj) { if (obj instanceof _) return obj; if (!(this instanceof _)) return new _(obj); this._wrapped = obj; }; if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { exports = module.exports = _; } exports._ = _; } else { root._ = _; } if (typeof define === 'function' && define.amd) { define('underscore', [], function() { return _; }); } }.call(this));
總體上也和差不多都是匿名函式,除了最後用的是call()方法。
相關文章
- javascript高階函式的介紹JavaScript函式
- javascript高階函式簡單介紹JavaScript函式
- javascript匿名函式簡單介紹JavaScript函式
- javascript匿名函式常用呼叫方式介紹JavaScript函式
- javascript匿名函式的使用簡單介紹JavaScript函式
- javascript匿名函式的優點簡單介紹JavaScript函式
- javascript函式中with的介紹JavaScript函式
- js中匿名函式的使用簡單介紹JS函式
- 理解 JavaScript 中的高階函式JavaScript函式
- Javascript 高階函式JavaScript函式
- javascript中generator函式的介紹JavaScript函式
- 【重溫基礎】JS中的常用高階函式介紹JS函式
- JavaScript 匿名函式JavaScript函式
- JavaScript匿名函式JavaScript函式
- javaScript高階級函式JavaScript函式
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- Python中的高階函式簡介Python函式
- JavaScript 中匿名函式的遞迴呼叫JavaScript函式遞迴
- 學習javaScript必知必會(1)~js介紹、函式、匿名函式、自呼叫函式、不定長引數JavaScriptJS函式
- 2 Day DBA-介紹-關於高階安裝
- 《前端之路》之 JavaScript 高階技巧、高階函式(一)前端JavaScript函式
- JavaScript 匿名函式 閉包JavaScript函式
- JavaScript 高階函式快速入門JavaScript函式
- javascript高階函式的應用JavaScript函式
- 【碼上開學】Kotlin 的高階函式、匿名函式和 Lambda 表示式Kotlin函式
- 閉包詳解二:JavaScript中的高階函式JavaScript函式
- javascript的split()函式使用介紹JavaScript函式
- Python函數語言程式設計-高階函式、匿名函式、裝飾器、偏函式Python函數程式設計函式
- JavaScript(1)高階函式filter、map、reduceJavaScript函式Filter
- javascript高階函式---filter---map---reduceJavaScript函式Filter
- javascript call()函式用法簡單介紹JavaScript函式
- javascript trim()函式用法簡單介紹JavaScript函式
- javascript函式呼叫方式簡單介紹JavaScript函式
- 高階函式函式
- Kotlin中的高階函式Kotlin函式
- JavaScript 高階函式(Heigher-order function)JavaScript函式Function
- 深入理解javascript系列(十五):高階函式JavaScript函式
- js中的匿名函式JS函式