`
lanlansnss
  • 浏览: 45350 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript 使用对象最之前的操作结果记忆

 
阅读更多
本文关于javascript的内容部分借用《javascript语言精粹》这本书!
//函数可以用对象去记住之前操作的结果,从而能避免无所谓的运算,这种优化叫做记忆
//使用递归函数计算fibonacci数列 斐波纳数列
var fibonacci = function(n){
	return n<2 ? n : fibonacci(n-1) + fibonacci(n-2);
}
for(var i=0; i<=10; i+=1){
	//console.log('//'+i+':'+fibonacci(i));
}

//存贮结果可以隐藏在闭包忠。当我们函数被调用是,首先检测存贮结果 如果已经存在立即返回
var _fibonacci = function(){
	var memo = [0,1];
	var fib  = function(n){
		var result = memo[n];
		if( typeof result !==  'number'){
			result = fib(n-1) + fib(n-2);
			memo[n] = result;
		};
		return result;
	}
	return fib;
}();
var a = _fibonacci;
for(var i=0; i<=10; i+=1){
	console.log('//'+i+':'+a(i));
}

//我们把这种形式一般化, 编写一个函数帮主我们构造带记忆功能的函数
var memoizer = function(memo, fundamental){
	var shell = function(n){
		var result = memo[n];
		if(typeof result !== 'number'){
			result = fundamental(shell, n);
			memo[n] = result;
		}
		console.log(memo);
		return result;
	}
	return shell;
};
var fibon = memoizer( [0,1] , function(shell, n){
	return shell(n-1) + shell(n-2);
})
var factoial = memoizer([1,1], function(shell,n){
	return n * shell(n-1);
})
console.log(factoial(5));
分享到:
评论

相关推荐

    《JavaScript忍者秘籍》┊John Resig PDF

    2. **对象与原型**:JavaScript中的对象是基于原型的,John Resig详细阐述了对象的创建、属性的访问以及原型链的工作原理,帮助读者理解JavaScript的面向对象特性。 3. **闭包与作用域**:JavaScript中的闭包是一种...

    JavaScript树型菜单 dtree

    - **记忆状态**:为了提供更好的用户体验,dtree可能保存用户之前的状态(如展开的节点),在页面刷新后恢复这些状态。 5. **跨平台与兼容性** - 考虑到不同的浏览器支持,dtree可能经过优化以兼容主流的浏览器,...

    JavaScript实用技巧集锦

    JavaScript,作为全球最广泛使用的编程语言之一,是前端开发的核心技术。这个名为“JavaScript实用技巧集锦”的压缩包,显然是一份汇集了多种JavaScript高效编程技巧的资源。它旨在帮助开发者提升代码质量、提高开发...

    深入浅出javascript源码

    JavaScript,作为全球最广泛使用的编程语言之一,是创建交互式网页和应用程序的关键工具。深入理解其源码对于提升编程技能至关重要。《深入浅出JavaScript》这本书致力于帮助读者掌握JavaScript的核心概念,通过配合...

    了解Javascript中函数作为对象的魅力

    - **缓存结果**:在计算密集型操作中,比如计算素数或其他复杂的算法,使用缓存记忆可以大幅提升性能。 - **管理回调函数**:在事件驱动编程中,为回调函数添加属性可以帮助更好地管理状态,例如在异步请求中保存...

    JavaScript学习笔记之函数记忆

    JavaScript中的函数记忆是一种优化技术,它通过存储函数的先前计算结果来提高性能。函数记忆的主要思想是,如果一个函数被多次调用,并且每次调用的参数相同,那么第二次及之后的调用可以直接从缓存中获取结果,而...

    JavaScript中文手册

    异步编程是JavaScript的一大特色,常见的有回调函数、Promise(用于处理异步操作的结果,解决回调地狱问题)、async/await(基于Promise的语法糖,使得异步代码看起来像同步代码)以及事件监听和发布。 7. **DOM...

    Memory Card Game using JavaScript with Source Code.zip

    总结,JavaScript记忆卡牌游戏项目是一个集成了HTML、CSS和JavaScript的综合实践,它展示了如何使用这些技术创建一个互动性强、用户体验良好的网页应用。通过学习和理解这个项目,开发者不仅能巩固JavaScript基础,...

    javascript编程实例

    6. **DOM操作**:通过JavaScript操作文档对象模型(DOM),包括元素选择、添加、删除、修改以及事件监听。 7. **AJAX异步通信**:理解XMLHttpRequest或fetch API,用于实现页面无刷新的数据交换。 8. **Promise和...

    JavaScript 核心参考教程 RegExp对象

    正则表达式是一种强大的文本处理工具,广泛用于在字符串中执行搜索、替换等...理解这些知识点对于掌握JavaScript中的RegExp对象至关重要,它们能够帮助开发者在实际开发中对字符串进行灵活的匹配、替换和验证等操作。

    JS翻牌游戏

    1. 初始化状态:设定所有翻牌的初始朝向(正面或背面),可能使用数据属性或JavaScript对象来存储当前状态。 2. 翻转操作:监听用户的点击事件,当用户点击翻牌时,改变翻牌的朝向。这通常通过修改CSS的`transform`...

    深入理解JavaScript作用域共12页.pdf.zip

    JavaScript作用域是编程中至关重要的概念,它定义了变量、函数和对象的可见性和生命周期。在深入理解JavaScript作用域时,我们需要关注以下几个关键知识点: 1. **全局作用域**:这是程序中默认的作用域,任何在...

    javascript的正则表达式

    - JavaScript的字符串对象提供了 `match()`, `search()`, `replace()`, `split()` 等方法,它们都接受正则表达式作为参数,用于执行匹配、查找、替换和分割操作。 5. **应用实例** - 数据验证:如 `/^\d{3}-\d{4}...

    memory:Javascript 中的记忆游戏

    今天我们将深入探讨如何使用JavaScript这一流行的前端语言来创建一个简单的记忆游戏。JavaScript,作为Web开发的重要组成部分,其灵活性和易用性使得它非常适合用于创建交互式的网页应用,包括游戏。 首先,我们要...

    javascript中递归函数用法注意点

    3. **缓存结果**:对于重复计算的情况,可以使用记忆化(memoization)技术来存储之前计算过的值,避免重复计算。 4. **考虑尾递归优化**:在支持尾递归优化的JavaScript环境中(如使用`--harmony_tailcalls`标志的...

    Javascript-Calculator:javascript计算器freecodecamp项目

    10. **内存操作(高级)**:高级的计算器可能还包括记忆功能,允许用户存储和调用之前的计算结果。这需要额外的变量来跟踪和操作内存。 总的来说,这个项目涵盖了JavaScript的基础和进阶知识,是提升编程技能的好...

    js代码-js 记忆函数

    在JavaScript中,我们可以使用闭包和对象属性来实现记忆化。下面将详细介绍这两种方法。 首先,我们理解一下闭包的概念。闭包是JavaScript中的一个重要特性,它允许一个函数访问并操作其外部作用域的变量,即使在其...

    advanced-javascript-fundamentals:高级 JavaScript 基础的游乐场

    每个JavaScript对象都有一个内部`__proto__`属性,指向它的构造函数的原型对象。 3. **异步编程(Asynchronous Programming)**:JavaScript是非阻塞的,因此理解和掌握事件循环、回调函数、Promise和async/await等...

Global site tag (gtag.js) - Google Analytics