前言

本文主要给大家介绍了关于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实现一个数组惰性求值库
# 首次
# 全局变量
# 都必须
# 相关内容
# 都要
# 说了
# 一是
# 不多
# 这个问题
# 很容易
# 我们可以
# 这样做
# 给大家
# 很简单
# 重写
# 只需要
# 可以使用
# 我们现在
# 当我们
# 这篇文章
相关文章:
如何快速登录WAP自助建站平台?
网站制作公司排行榜,抖音怎样做个人官方网站
如何配置IIS站点权限与局域网访问?
如何用IIS7快速搭建并优化网站站点?
网站制作新手教程,新手建设一个网站需要注意些什么?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何在Golang中使用replace替换模块_指定本地或远程路径
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站之星免费版是否永久可用?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
建站主机如何选?高性价比方案全解析
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
深圳网站制作平台,深圳市做网站好的公司有哪些?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何快速搭建虚拟主机网站?新手必看指南
javascript中的try catch异常捕获机制用法分析
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
广州营销型建站服务商推荐:技术优势与SEO优化解析
制作网站公司那家好,网络公司是做什么的?
如何选择PHP开源工具快速搭建网站?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何用搬瓦工VPS快速搭建个人网站?
如何快速上传建站程序避免常见错误?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
教学网站制作软件,学习*后期制作的网站有哪些?
如何快速搭建FTP站点实现文件共享?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
成都响应式网站开发,dw怎么把手机适应页面变成网页?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
网站制作服务平台,有什么网站可以发布本地服务信息?
建站主机选购指南:核心配置优化与品牌推荐方案
建站之星×万网:智能建站系统+自助建站平台一键生成
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
企业微网站怎么做,公司网站和公众号有什么区别?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
网站制作网站,深圳做网站哪家比较好?
如何规划企业建站流程的关键步骤?
c# 在高并发场景下,委托和接口调用的性能对比
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
Python文件管理规范_工程实践说明【指导】
如何通过PHP快速构建高效问答网站功能?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
*请认真填写需求信息,我们会在24小时内与您取得联系。