es6 有趣的知识点

1.尾调用优化(尾递归)

这就叫做“尾调用优化”(Tail call optimization),即只保留内层函数的调用帧。如果所有函数都是尾调用,那么完全可以做到每次执行时,调用帧只有一项,这将大大节省内存。这就是“尾调用优化”的意义。

// 情况一
function f(x){
  let y = g(x);
  return y;
}

// 情况二
function f(x){
  return g(x) + 1;
}

// 情况三
function f(x){
  g(x);
}

情况三就是尾调用,此处可以做尾调用优化。原因:g(x) 没有用到f(x) 定义的变量

注意:

ES6 的尾调用优化只在严格模式下开启,正常模式是无效的。

这是因为在正常模式下,函数内部有两个变量,可以跟踪函数的调用栈。

func.arguments:返回调用时函数的参数。 func.caller:返回调用当前函数的那个函数。

不在严格模式下如何实现尾递归的优化,防止堆栈溢出,将递归转换成循环

目前不是完全懂。。以后再看

2.spread 扩展运算符 ... rest

  1. 用于传参
  2. 用于伪数组,转数组

3.箭头函数,解构赋值

上次更新: 2019-1-24 17:27:53