美文网首页前端开发那些事前端杂货铺
惰性函数定义(Lazy Function Definition)

惰性函数定义(Lazy Function Definition)

作者: 奥尼酱 | 来源:发表于2016-11-08 11:53 被阅读0次

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)

相关文章

  • 惰性函数定义(Lazy Function Definition)

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

  • #C++ Primer Plus# 第二章 开始学习C++

    2.1 进入C++ 2.1.1 main() 函数 函数定义(function definition)= 函数头(...

  • Swift Collection 中的 lazy 作用

    惰性求值 惰性求值常见于函数式编程中,也有人把惰性求值翻译成延迟求值(Lazy Evaluation)。它的目的是...

  • shell函数工作实战应用

    shell函数:function函数定义:[function] funcname(){Statement;} 注意...

  • js高级-03

    函数的定义和调用 函数的定义方式 函数声明方式 function 关键字 (命名函数)function fn(){...

  • 闭包的总结

    我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变...

  • ES5 ES6函数

    ES5 定义函数3种形式: 1、function语句形式定义函数 2、function直接量定义函数 3、Func...

  • Function

    函数定义 函数声明 function add () {} 函数表达式 var add = function () ...

  • JavaScript开发者学习Python: 1.2 函数

    定义函数在 JavaScript 中 定义函数使用关键字 function function my_ads (x)...

  • kotlin-by lazy实现原理

    一、lazy的定义 lazy是一个定义在LazyJVM中的函数,有两种实现。这里看其中一种: lazy其实就是使用...

网友评论

    本文标题:惰性函数定义(Lazy Function Definition)

    本文链接:https://www.haomeiwen.com/subject/eiyauttx.html