JavaScript惰性载入函数实例分析


Posted in Javascript onMarch 27, 2019

本文实例讲述了JavaScript惰性载入函数。分享给大家供大家参考,具体如下:

惰性载入函数

惰性载入函数表示函数执行的分支仅会发生一次,有两种实现惰性载入函数的方式,第一种是在函数被调用时再处理,在第一次调用中,该函数会覆盖为另外一个按合适方式执行的函数,这样任何对函数的调用都不用再经过执行的分支了。第二种实现惰性载入的方式是在声明函数时就制定适当的函数,这样,第一次调用函数时就不会损失性能了,而在代码首次加载时会损失一点儿性能。

载入方式一

var flag = 1;
function test1() {
 if(typeof flag === 'undefined') {
  test1 = function() {
   return 0;
  }
 } else if(flag === 1) {
  test1 = function() {
   return 1;
  }
 } else {
  test1 = function () {
   return -1;
  }
 }
 return test1();
}

这里if语句的每个分支都会为test1变量赋值,有效覆盖了原有的函数,最后一步便是调用新赋的函数,下一次调用test1()的时候就会直接调用被分配的函数,就不会再走if语句了,这样就可以提高性能。

载入方式二

var flag = 1;
var test2 = (function() {
 if(typeof flag === 'undefined') {
  return function() {
   return 0;
  }
 } else if(flag === 1) {
  return function () {
   return 1;
  }
 } else {
  return function () {
   return -1;
  }
 }
})();

不同点是使用了立即执行函数,通过var来定义函数,在每个if分支中return一个函数

总结

这两种方式都能避免执行不必要的代码。方式一中第一次调用会损失性能,方式二重首次加载时会损失性能

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
Aug 28 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
Sep 09 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
js获取html的span标签的值方法(超简单)
Jul 26 Javascript
原生JS发送异步数据请求
Jun 08 Javascript
Bootstrap table使用方法记录
Aug 23 Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
May 21 Javascript
vue-loader中引入模板预处理器的实现
Sep 04 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 Javascript
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
微信小程序实现获取准确的腾讯定位地址功能示例
Mar 27 #Javascript
详解JS浏览器事件循环机制
Mar 27 #Javascript
详解如何更好的使用module vuex
Mar 27 #Javascript
原生js实现获取form表单数据代码实例
Mar 27 #Javascript
JQueryDOM之样式操作
Mar 27 #jQuery
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
Mar 27 #Javascript
Node.js 多线程完全指南总结
Mar 27 #Javascript
You might like
PHP 中dirname(_file_)讲解
2007/03/18 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
JS实现的找零张数最小问题示例
2017/11/28 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
python登录QQ邮箱发信的实现代码
2013/02/10 Python
Python多线程和队列操作实例
2015/06/21 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python生成器与迭代器详解
2019/01/01 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
python解析多层json操作示例
2019/12/30 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
莫言获奖感言(全文)
2015/07/31 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
Python中npy和mat文件的保存与读取
2022/04/24 Python