前言

本文主要给大家介绍了关于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小时内与您取得联系。