《JavaScript忍者秘籍(第二版)》学习笔记
3.1.1 函数是第一类对象
对象能做的任何一件事,函数也都能做。函数也是对象,唯一的特殊之处在于它是可调用的(invokable),即函数会被调用以便执行某项动作。
3.1.2 回调函数
作为参数传递
3.2.1 存储函数
const store = {
nextId: 1,
cache: {},
add: function(fn) {
if (!fn.id) {
fn.id = this.nextId++;
this.cache[fn.id] = fn;
return true
}
}
}
3.2.2 自记忆函数
记忆化(memoization)是一种构建函数的处理过程,能够记住上次计算结果,参数存储起来。如果另外一个调用也使用相同的参数,我们则可以直接返回上次存储的结果而不是再计算一遍。像这样避免既重复又复杂的计算可以显著地提高性能。对于动画中的计算、搜索不经常变化的数据或任何耗时的数学计算来说,记忆化这种方式是十分有用的。
优点:
- 存储结果,性能好
缺点:
- 缓存会为性能牺牲内存。
- 缓存逻辑不应该和业务逻辑混合,函数或方法只需要把一件事做好。
- 难做负载测试或估计算法复杂度,结果依赖于函数之前的输入。
3.3 函数定义
生成器函数
ES6新增功能,拥有在一个函数块内暂停和恢复代码执行的能力。(第六章会详细展开)