JavaScript的记忆函数真的可以提升性能吗?

1 记忆函数是什么呢?

让函数记住曾经计算过的参数对应的结果

2 那我们为什么使用记忆函数呢?

答案是 避免重复计算

3 在工作中如何使用和实现函数记忆 ?

形成闭包,在闭包中维护一个哈希数组(其实就是对象),让哈希数组帮你记住曾经你做过的计算

请看下面的例子:(计算质数)

先写两个函数

第一个数带记忆功能的:

let isPrime = (function () {

     let hash = {//哈希中存储类似这样的结构

        //8: false,

        //7: true

      }

      let isPrime = (n)=> { // 返回内层函数

         if (n <3) {

             return true

          } else if (hash[n] !==undefined) {

              return hash[n]

          } else {

             for (leti = 2; i < Math.sqrt(n);i++) {

                 if (n%i ==0) {

                    return hash[n] =false;

                 }

             }

            return hash[n] =true

         }

     }

    return isPrime

})() //这个函数使用闭包 和 一个对象(实现记忆)

 

第二个是个普通函数

 

let isPrime1 = (n)=> {

    if (n <3) {

       return true

     } else {

        for (leti = 2; i < Math.sqrt(n);i++) {

           if (n%i ==0) {

               return false;

           }

       }

      return true

    }

}

然后我们来见证一下他们的区别吧~~~~

 

// 先声明一个空数组 我往里push 1000000 个 1100 以内的 随机数

 

let array = []

for (leti = 0; i < 1000000; i++) {

    array.push(parseInt(Math.random() *1100 ))

}

进入测试阶段 ~~~ (利用console.time 和 console.Endtime)看看执行时间.....

 

// 这个是没有带函数记忆的~~


console.time(‘isPrime1‘)

for (leti = 0; i < array.length;i++) {

   isPrime1(array[i])

}

console.timeEnd(‘isPrime1‘)

 

 

// 这个是带函数记忆的

console.time(‘isPrime‘)

for (leti = 0; i < array.length;i++) {

    isPrime(array[i])

}

console.timeEnd(‘isPrime‘)

下面就是结果了~~


日常项目中能用到的话,也可以提升些性能吧~~~^_^

jpg 改 rar

时间: 2024-10-02 21:30:45

JavaScript的记忆函数真的可以提升性能吗?的相关文章

JavaScript 函数作用域的“提升”现象

在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的.例如 : message = "hello JavaScript ! " 即定义了一个全局变量message,并赋值 "Hello JavaScript!"--<JavaScript高级程序第三版> 如同往日一般,一群人在所谓的技术交流群里面相互斗图着.突然老王莫名的正经起来,在群里发了一道JavaScript的题目,让大家猜一猜这道题的答案. v

JavaScript中变量和函数声明的提升

现象: 1.在JavaScript中变量和函数的声明会提升到最顶部执行. 2.函数的提升高于变量的提升. 3.函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找. 4.匿名函数不会提升. 5.不同<script>块中的函数互不影响. 例子: 函数声明提升高于变量声明 //同时声明变量a和函数a var a; function a() {} alert(typeof a); //显示的是"function",初步证明function的优先级高于var. //先声

Javascript学习之函数(function)

在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函数的声明方式 //1.函数声明方式 function add(num1,num2){ return num1+num2; } //2.函数表达式定义函数 var add= function(num1,num2){ // 通过变量box即可引用函数; return num1+num2; }; // 注

提升性能-事件委托技术

--- title: 提升性能——事件委托技术 date: 2016-05-11 22:13:43 tags: [javascript,improving performance, font-end] --- 提升页面性能之事件委托技术 (整理摘选自<Javascript高级程序设计>)概述 利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 实际例子 HTML部分 <ul id = "mylinks"> <li id = "g

JavaScript权威指南 - 函数

函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象.JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等. JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量.这也就是所谓的"闭包&qu

JavaScript中的函数有什么特点? 应该怎样优化?

函数 与 优化 1. 函数构造方法: js中所有函数的构造函数都是Function,包括Function本身,(Function是自己的实例,也是自己的构造函数) 证明: Function.prototype === Function.__proto__ 1.1 函数声明: function 函数名(){} 1.2函数表达式: var 函数名 = function(){}; 1.3构造函数: var 函数名 = new Function(参数1,参数2,函数体); 1. 不传参数创建出来的是空函

javascript立即执行函数

javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  ( function(){…} )()  和  ( function (){…} () )  是两种javascript立即执行函数的常见写法; 最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的; 后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一

paip.提升性能3倍--使用栈跟VirtualAlloc代替堆的使用.

#----为什么要设计堆栈,它有什么独特的用途? 为了性能 ....  堆比栈的性能 也有的说法为了编程容易...这个是错误的.因为使用堆+func也能实现编程简单地.. #----为什么stack 比堆快,stackAccess 要快两到三倍 主要的2点::  使用堆额外的操作多,而且机器硬件上直接支持栈操作.. 堆栈都是一段内存条中的内存区域,感觉上,应该上没有多大的访问速度差别..但是,实际上,还是有很大的的速度效率区别.. 1.存取路径短1倍. 堆的分配/释放都要比栈要慢的多 结论:可以

浅谈JavaScript中的函数问题

前面的话:JavaScript可运行在所有主要平台的主流浏览器上,也可运行在每一个主流操作系统的服务器端上.所以呢,要想成为一名优秀的全栈工程师,必须懂得JavaScript语言.这是我整理的JS的部分函数问题,供大家参考借阅,有不妥的地方也请多多指教. 1.函数的三要素    1.1 函数的功能   1.2 函数的参数 a. 形参——定义函数的时候,没有实际的值,给实参占位 b. 实参——调用函数的时候,有实际的值: c. 当调用函数的时候会把实参复制一份传递给函数 d. 函数调用的时候,实参