第三章 函数入门:定义与参数 | 《JavaScript忍者秘籍》学习笔记

152 阅读1分钟

《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)是一种构建函数的处理过程,能够记住上次计算结果,参数存储起来。如果另外一个调用也使用相同的参数,我们则可以直接返回上次存储的结果而不是再计算一遍。像这样避免既重复又复杂的计算可以显著地提高性能。对于动画中的计算、搜索不经常变化的数据或任何耗时的数学计算来说,记忆化这种方式是十分有用的。

优点:

  1. 存储结果,性能好

缺点:

  1. 缓存会为性能牺牲内存。
  2. 缓存逻辑不应该和业务逻辑混合,函数或方法只需要把一件事做好。
  3. 难做负载测试或估计算法复杂度,结果依赖于函数之前的输入。

3.3 函数定义

生成器函数

ES6新增功能,拥有在一个函数块内暂停和恢复代码执行的能力。(第六章会详细展开)