本文关于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));
分享到:
相关推荐
2. **对象与原型**:JavaScript中的对象是基于原型的,John Resig详细阐述了对象的创建、属性的访问以及原型链的工作原理,帮助读者理解JavaScript的面向对象特性。 3. **闭包与作用域**:JavaScript中的闭包是一种...
- **记忆状态**:为了提供更好的用户体验,dtree可能保存用户之前的状态(如展开的节点),在页面刷新后恢复这些状态。 5. **跨平台与兼容性** - 考虑到不同的浏览器支持,dtree可能经过优化以兼容主流的浏览器,...
JavaScript,作为全球最广泛使用的编程语言之一,是前端开发的核心技术。这个名为“JavaScript实用技巧集锦”的压缩包,显然是一份汇集了多种JavaScript高效编程技巧的资源。它旨在帮助开发者提升代码质量、提高开发...
JavaScript,作为全球最广泛使用的编程语言之一,是创建交互式网页和应用程序的关键工具。深入理解其源码对于提升编程技能至关重要。《深入浅出JavaScript》这本书致力于帮助读者掌握JavaScript的核心概念,通过配合...
- **缓存结果**:在计算密集型操作中,比如计算素数或其他复杂的算法,使用缓存记忆可以大幅提升性能。 - **管理回调函数**:在事件驱动编程中,为回调函数添加属性可以帮助更好地管理状态,例如在异步请求中保存...
JavaScript中的函数记忆是一种优化技术,它通过存储函数的先前计算结果来提高性能。函数记忆的主要思想是,如果一个函数被多次调用,并且每次调用的参数相同,那么第二次及之后的调用可以直接从缓存中获取结果,而...
异步编程是JavaScript的一大特色,常见的有回调函数、Promise(用于处理异步操作的结果,解决回调地狱问题)、async/await(基于Promise的语法糖,使得异步代码看起来像同步代码)以及事件监听和发布。 7. **DOM...
总结,JavaScript记忆卡牌游戏项目是一个集成了HTML、CSS和JavaScript的综合实践,它展示了如何使用这些技术创建一个互动性强、用户体验良好的网页应用。通过学习和理解这个项目,开发者不仅能巩固JavaScript基础,...
6. **DOM操作**:通过JavaScript操作文档对象模型(DOM),包括元素选择、添加、删除、修改以及事件监听。 7. **AJAX异步通信**:理解XMLHttpRequest或fetch API,用于实现页面无刷新的数据交换。 8. **Promise和...
正则表达式是一种强大的文本处理工具,广泛用于在字符串中执行搜索、替换等...理解这些知识点对于掌握JavaScript中的RegExp对象至关重要,它们能够帮助开发者在实际开发中对字符串进行灵活的匹配、替换和验证等操作。
1. 初始化状态:设定所有翻牌的初始朝向(正面或背面),可能使用数据属性或JavaScript对象来存储当前状态。 2. 翻转操作:监听用户的点击事件,当用户点击翻牌时,改变翻牌的朝向。这通常通过修改CSS的`transform`...
JavaScript作用域是编程中至关重要的概念,它定义了变量、函数和对象的可见性和生命周期。在深入理解JavaScript作用域时,我们需要关注以下几个关键知识点: 1. **全局作用域**:这是程序中默认的作用域,任何在...
- JavaScript的字符串对象提供了 `match()`, `search()`, `replace()`, `split()` 等方法,它们都接受正则表达式作为参数,用于执行匹配、查找、替换和分割操作。 5. **应用实例** - 数据验证:如 `/^\d{3}-\d{4}...
今天我们将深入探讨如何使用JavaScript这一流行的前端语言来创建一个简单的记忆游戏。JavaScript,作为Web开发的重要组成部分,其灵活性和易用性使得它非常适合用于创建交互式的网页应用,包括游戏。 首先,我们要...
3. **缓存结果**:对于重复计算的情况,可以使用记忆化(memoization)技术来存储之前计算过的值,避免重复计算。 4. **考虑尾递归优化**:在支持尾递归优化的JavaScript环境中(如使用`--harmony_tailcalls`标志的...
10. **内存操作(高级)**:高级的计算器可能还包括记忆功能,允许用户存储和调用之前的计算结果。这需要额外的变量来跟踪和操作内存。 总的来说,这个项目涵盖了JavaScript的基础和进阶知识,是提升编程技能的好...
在JavaScript中,我们可以使用闭包和对象属性来实现记忆化。下面将详细介绍这两种方法。 首先,我们理解一下闭包的概念。闭包是JavaScript中的一个重要特性,它允许一个函数访问并操作其外部作用域的变量,即使在其...
每个JavaScript对象都有一个内部`__proto__`属性,指向它的构造函数的原型对象。 3. **异步编程(Asynchronous Programming)**:JavaScript是非阻塞的,因此理解和掌握事件循环、回调函数、Promise和async/await等...