国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript學習筆記之惰性函數示例詳解

2024-05-06 15:12:16
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于JavaScript惰性函數的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

需求

我們現在需要寫一個 foo 函數,這個函數返回首次調用時的 Date 對象,注意是首次。

解決一:普通方法

var t;function foo() { if (t) return t; t = new Date() return t;}

問題有兩個,一是污染了全局變量,二是每次調用 foo 的時候都需要進行一次判斷。

解決二:閉包

我們很容易想到用閉包避免污染全局變量。

var foo = (function() { var t; return function() { if (t) return t; t = new Date(); return t; }})();

然而還是沒有解決調用時都必須進行一次判斷的問題。

解決三:函數對象

函數也是一種對象,利用這個特性,我們也可以解決這個問題。

function foo() { if (foo.t) return foo.t; foo.t = new Date(); return foo.t;}

依舊沒有解決調用時都必須進行一次判斷的問題。

解決四:惰性函數

不錯,惰性函數就是解決每次都要進行判斷的這個問題,解決原理很簡單,重寫函數。

var foo = function() { var t = new Date(); foo = function() { return t; }; return foo();};

更多應用

DOM 事件添加中,為了兼容現代瀏覽器和 IE 瀏覽器,我們需要對瀏覽器環境進行一次判斷:

// 簡化寫法function addEvent (type, el, fn) { if (window.addEventListener) { el.addEventListener(type, fn, false); } else if(window.attachEvent){ el.attachEvent('on' + type, fn); }}

問題在于我們每當使用一次 addEvent 時都會進行一次判斷。

利用惰性函數,我們可以這樣做:

function addEvent (type, el, fn) { if (window.addEventListener) { addEvent = function (type, el, fn) {  el.addEventListener(type, fn, false); } } else if(window.attachEvent){ addEvent = function (type, el, fn) {  el.attachEvent('on' + type, fn); } }}

當然我們也可以使用閉包的形式:

var addEvent = (function(){ if (window.addEventListener) { return function (type, el, fn) {  el.addEventListener(type, fn, false); } } else if(window.attachEvent){ return function (type, el, fn) {  el.attachEvent('on' + type, fn); } }})();

當我們每次都需要進行條件判斷,其實只需要判斷一次,接下來的使用方式都不會發生改變的時候,想想是否可以考慮使用惰性函數。

重要參考

Lazy Function Definition Pattern

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對錯新站長站的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 南丹县| 麻阳| 会东县| 章丘市| 鹿邑县| 武安市| 新乡市| 慈利县| 自贡市| 宁蒗| 定安县| 科尔| 牟定县| 钦州市| 富裕县| 子长县| 周宁县| 和静县| 资兴市| 贡觉县| 沙雅县| 平山县| 建湖县| 衡山县| 房山区| 苏尼特左旗| 涿鹿县| 醴陵市| 西昌市| 桃江县| 海淀区| 大宁县| 兴义市| 开化县| 永登县| 忻州市| 尚志市| 集贤县| 霍邱县| 黑山县| 邢台县|