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

首頁 > 開發(fā) > JS > 正文

JavaScript學(xué)習(xí)筆記之惰性函數(shù)示例詳解

2024-05-06 16:39:16
字體:
供稿:網(wǎng)友

前言

本文主要給大家介紹了關(guān)于JavaScript惰性函數(shù)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

需求

我們現(xiàn)在需要寫一個(gè) foo 函數(shù),這個(gè)函數(shù)返回首次調(diào)用時(shí)的 Date 對(duì)象,注意是首次。

解決一:普通方法

javascript/215048.html">js;">var t;function foo() { if (t) return t; t = new Date() return t;}

問題有兩個(gè),一是污染了全局變量,二是每次調(diào)用 foo 的時(shí)候都需要進(jìn)行一次判斷。

解決二:閉包

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

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

然而還是沒有解決調(diào)用時(shí)都必須進(jìn)行一次判斷的問題。

解決三:函數(shù)對(duì)象

函數(shù)也是一種對(duì)象,利用這個(gè)特性,我們也可以解決這個(gè)問題。

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

依舊沒有解決調(diào)用時(shí)都必須進(jìn)行一次判斷的問題。

解決四:惰性函數(shù)

不錯(cuò),惰性函數(shù)就是解決每次都要進(jìn)行判斷的這個(gè)問題,解決原理很簡(jiǎn)單,重寫函數(shù)。

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

更多應(yīng)用

DOM 事件添加中,為了兼容現(xiàn)代瀏覽器和 IE 瀏覽器,我們需要對(duì)瀏覽器環(huán)境進(jìn)行一次判斷:

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

問題在于我們每當(dāng)使用一次 addEvent 時(shí)都會(huì)進(jìn)行一次判斷。

利用惰性函數(shù),我們可以這樣做:

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); } }}

當(dāng)然我們也可以使用閉包的形式:

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); } }})();

當(dāng)我們每次都需要進(jìn)行條件判斷,其實(shí)只需要判斷一次,接下來的使用方式都不會(huì)發(fā)生改變的時(shí)候,想想是否可以考慮使用惰性函數(shù)。

重要參考

Lazy Function Definition Pattern

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 钟山县| 福安市| 镇安县| 兖州市| 东安县| 栾城县| 屏东市| 定南县| 高州市| 尉氏县| 长乐市| 商城县| 灯塔市| 文水县| 辉南县| 全椒县| 宣汉县| 连州市| 龙南县| 泾川县| 浮山县| 青阳县| 大英县| 阜新市| 浑源县| 普兰店市| 酒泉市| 碌曲县| 库尔勒市| 海宁市| 石楼县| 白玉县| 永兴县| 纳雍县| 长宁县| 扎兰屯市| 桐梓县| 台中市| 额济纳旗| 新巴尔虎左旗| 清河县|