JavaScript学习笔记之惰性函数示例详解
发布时间 - 2026-01-11 02:58:42 点击率:次前言

本文主要给大家介绍了关于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实现一个数组惰性求值库
# 首次
# 全局变量
# 都必须
# 相关内容
# 都要
# 说了
# 一是
# 不多
# 这个问题
# 很容易
# 我们可以
# 这样做
# 给大家
# 很简单
# 重写
# 只需要
# 可以使用
# 我们现在
# 当我们
# 这篇文章
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php json中文编码为null的解决办法
EditPlus中的正则表达式实战(5)
如何续费美橙建站之星域名及服务?
如何快速搭建自助建站会员专属系统?
海南网站制作公司有哪些,海口网是哪家的?
如何在Windows 2008云服务器安全搭建网站?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
bootstrap日历插件datetimepicker使用方法
canvas 画布在主流浏览器中的尺寸限制详细介绍
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
简历没回改:利用AI润色让你的文字更专业
高端建站如何打造兼具美学与转化的品牌官网?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
微信h5制作网站有哪些,免费微信H5页面制作工具?
高端网站建设与定制开发一站式解决方案 中企动力
网站制作企业,网站的banner和导航栏是指什么?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
详解Android中Activity的四大启动模式实验简述
如何在云服务器上快速搭建个人网站?
如何快速生成高效建站系统源代码?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
JavaScript如何实现继承_有哪些常用方法
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
在centOS 7安装mysql 5.7的详细教程
如何用腾讯建站主机快速创建免费网站?
Laravel如何实现事件和监听器?(Event & Listener实战)
太平洋网站制作公司,网络用语太平洋是什么意思?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何快速启动建站代理加盟业务?
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
香港服务器WordPress建站指南:SEO优化与高效部署策略
昵图网官网入口 昵图网素材平台官方入口
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何用PHP快速搭建CMS系统?
Laravel如何处理和验证JSON类型的数据库字段
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何快速生成橙子建站落地页链接?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出

