函数一等功臣
TODO
什么是尾调用优化和尾递归?
尾调用指函数的最后一步操作是调用另一个函数。
// 有的引擎可以做到类似以下的优化,简化了函数的调 用栈
function f() {
let m = 1;
let n = 2;
return g(m + n);
}
f();
// 等同于
function f() {
return g(3);
}
f();
// 等同于
g(3);
function factorial(n, total) {
if (n === 1) return total;
return factorial(n - 1, n * total);
}
factorial(5, 1) // 120
"尾调用优化"对递归操作意义重大,所以一些函数式编程语言将其写入了语言规格。ES6也是如此,第一次明确规定,所有 ECMAScript 的实现,都必须部署"尾调用优化"。这就是说,在 ES6 中,只要使 用尾递归,就不会发生栈溢出,相对节省内存。
ES6箭头函数的特性
ES6 增加了箭头函数,基本语法为 let func = value => value; 相当于
let func = function (value) {
return value;
};
箭头函数与普通函数的区别在于: 1、箭头函数没有 this,所以需要通过查找作用域链来确定 this 的值,这就意味着如 果箭头函数被非箭头函数包含,this 绑定的就是最近一层非箭头函数的 this, 2、箭头函数没有自己的 arguments 对象,但是可以访问外围函数的 arguments 对象 3、不能通过 new 关键字调用,同样也没有 new.target 值和原型
arguments
arguments 是类数组对象,有 length 属性,不能调用数组方法 可用 Array.from()转换
箭头函数获取arguments
可用…rest 参数获取