zoukankan      html  css  js  c++  java
  • 惰性载入函数和一次性函数

    惰性载入函数和一次性函数基本类似;如惰性载入函数:

    在某个场景下我们的函数中有判断语句,这个判断依据在整个项目运行期间一般不会变化,所以判断分支在整个项目运行期间只会运行某个特定分支,那么就可以考虑惰性载入函数

    function foo(){
      if(a !== b){
        console.log('aaa')
      }else{
        console.log('bbb')
      }
    }

    // 优化后
    function foo(){
      if(a != b){
        foo = function(){
          console.log('aaa')
        }
      }else{
        foo = function(){
          console.log('bbb')
        }
      }
      return foo();
    }

    那么第一次运行之后就会覆写这个方法,下一次再运行的时候就不会执行判断了。当然现在只有一个判断,如果判断很多,分支比较复杂,那么节约的资源还是可观的。

    一次性函数道理一样:

    可以在函数体里覆写当前函数,那么可以创建一个一次性的函数,重新赋值之前的代码相当于只运行了一次,适用于运行一些只需要执行一次的初始化代码
    var sca = function() {
      console.log('msg')
      sca = function() {
        console.log('foo')
      }
    }
    sca() // msg
    sca() // foo
    sca() // foo

    虽然平时用到的少,但是有时候特殊场景确实需要用到,不了解一次性函数时解决就很头疼,或者加一个字段判断,初始值a=false,执行一次就赋值a=true

    var a = false

    var b = 0 // 改变b的值一次

    func ()  {

      if (!a) {

        console.log();// 执行一次的

        b ++

        a = true

      }

    }

    func()函数放到一个循环体里,b的值只改变1次,即为b=1

  • 相关阅读:
    roadmap
    Tree and Permutation
    码队的新桌游
    关于优先队列重载运算符
    YJJ's Salesman
    E. Natasha, Sasha and the Prefix Sums
    C. Anna, Svyatoslav and Maps
    D1. Kirk and a Binary String (easy version)
    C. Almost Equal
    D. Shortest Cycle
  • 原文地址:https://www.cnblogs.com/zyz-s/p/13206993.html
Copyright © 2011-2022 走看看