全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript学习笔记之惰性函数示例详解

前言

本文主要给大家介绍了关于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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# javascript  # 惰性函数  # js  # 惰性求值  # JavaScript惰性求值的一种实现方法示例  # JS设计模式之惰性模式(二)  # JS 学习总结之正则表达式的懒惰性和贪婪性  # JS优化与惰性载入函数实例分析  # js正则表达式惰性匹配和贪婪匹配用法分析  # JavaScript AJAX之惰性载入函数  # 利用函数的惰性载入提高javascript代码执行效率  # JavaScript 函数惰性载入的实现及其优点介绍  # 如何用JavaScript实现一个数组惰性求值库  # 首次  # 全局变量  # 都必须  # 相关内容  # 都要  # 说了  # 一是  # 不多  # 这个问题  # 很容易  # 我们可以  # 这样做  # 给大家  # 很简单  # 重写  # 只需要  # 可以使用  # 我们现在  # 当我们  # 这篇文章 


相关文章: 如何在景安服务器上快速搭建个人网站?  建站之星后台密码遗忘?如何快速找回?  建站之星后台管理系统如何操作?  建站之星2.7模板快速切换与批量管理功能操作指南  如何通过WDCP绑定主域名及创建子域名站点?  如何规划企业建站流程的关键步骤?  如何零成本快速生成个人自助网站?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何在阿里云域名上完成建站全流程?  在线教育网站制作平台,山西立德教育官网?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  免费视频制作网站,更新又快又好的免费电影网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  ppt制作免费网站有哪些,ppt模板免费下载网站?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何在搬瓦工VPS快速搭建网站?  nginx修改上传文件大小限制的方法  行程制作网站有哪些,第三方机票电子行程单怎么开?  建站之星如何防范黑客攻击与数据泄露?  建站之星下载版如何获取与安装?  制作网站公司那家好,网络公司是做什么的?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  广东企业建站网站优化与SEO营销核心策略指南  网站制作新手教程,新手建设一个网站需要注意些什么?  盘锦网站制作公司,盘锦大洼有多少5G网站?  利用JavaScript实现拖拽改变元素大小  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何用PHP工具快速搭建高效网站?  香港服务器如何优化才能显著提升网站加载速度?  青岛网站建设如何选择本地服务器?  如何在阿里云虚拟主机上快速搭建个人网站?    江苏网站制作公司有哪些,江苏书法考级官方网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  表情包在线制作网站免费,表情包怎么弄?  建站主机核心功能解析:服务器选择与网站搭建流程指南  SQL查询语句优化的实用方法总结  建站主机服务器选购指南:轻量应用与VPS配置解析  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  专业商城网站制作公司有哪些,pi商城官网是哪个?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  图册素材网站设计制作软件,图册的导出方式有几种?  微信小程序 input输入框控件详解及实例(多种示例)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。