惰性函数定义(Lazy Function Definition)

Javascript的函数是运行时定义的,可以随时替换函数定义,非常的灵活。
我们先加入一个函数,用于判断是否是chrome

function isChrome() {
  return /chrome/i.test(navigator.userAgent);
}

经常会有类似这样的需求,根据浏览器环境,执行不同的功能,常规做法是这样

function normalCreate() {
  if (isChrome()) {
    console.log('normal create in chrome');
  } else {
    console.log('normal create in other browser');
  }
}
normalCreate();
normalCreate();
normalCreate();

chrome控制台的输出

normal create in chrome
normal create in chrome
normal create in chrome

这很常见,就不做讲解了。


我们假设isChrome是一个非常消耗性能的函数,每次都执行一次isChrome,电脑和用户都会十分痛苦。这时就可以用惰性函数定义(Lazy Function Definition)来解决这个问题,在《Javascript高级程序设计》中,翻译为惰性载入函数,怎么看都是一个惰加载图片的意思……咱们还是叫惰性函数定义吧.

可以像这样改写:

function lazyLoadCreate () {
  console.log('first creating'); //  pos-1
  if (isChrome()) {
    lazyLoadCreate = function () {
      console.log('create function in chrome');
    }
  } else {
    lazyLoadCreate = function () {
      console.log('create function in other browser');
    }
  }
  return lazyLoadCreate();
}

lazyLoadCreate();
lazyLoadCreate();
lazyLoadCreate();

chrome 控制台的输出

first creating
create function in chrome
create function in chrome
create function in chrome

还有另一种写法,更加简洁

var lazyLoadCreate = (function() {
  console.log('first creating');
  if (isChrome()) {
    return function () {
      console.log('create function in chrome');
    }
  } else {
    return function () {
      console.log('create function in other browser');
    }
  }
})();

可见lazyloadCreate在第一次执行这个函数时被替换了, pos-1处只执行了一次

我公司有个支付小网站,就需要根据进入时是微信还是支付宝进入,决定不同的支付方式与界面主题,这时就可以用到惰性函数定义(Lazy Function Definition)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,191评论 2 19
  • @转自GitHub 介绍js的基本数据类型。Undefined、Null、Boolean、Number、Strin...
    YT_Zou阅读 1,213评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,666评论 25 708
  • 今天我要去吃肉 在夏天这种需要时时刻刻保持身材的季节,愿意陪你敞开裤腰带大口大口去吃肉的是真爱。 没错,我今晚上跟...
    白小七阅读 4,919评论 0 0
  • 早上6点30起床,洗脸刷牙,平常都会有的一些生活习惯,7点坐公交车,但是公交车却出故障了,临时换到另一辆公交车上,...
    戚月影阅读 132评论 0 0