总结

函数在 ES6 中并未经历巨大变化,然而一系列增量改进使得函数更易使用。

在特定参数未被传入时,函数的默认参数允许你更容易指定需要使用的值。而在 ES6 之前,这要求在函数内使用一些额外代码,以便检查参数是已否提供并为其分配一个不同的值。

剩余参数允许你将余下的所有参数放入指定数组。使用真正的数组并让你指定哪些参数需要被包含,使得剩余参数成为比 arguments 更为灵活的解决方案。

扩展运算符是剩余参数的好伙伴,允许在调用函数时将数组解构为分离的参数 在 ES6 之前, 要把数组的元素作为独立参数传给函数只有两种办法:手动指定每一个参数,或者使用 apply() 方法。有了扩展运算符,你就能轻易将数组传递给函数而无须担心该函数的 this 绑定。

新增的 name 属性能帮你在调试与执行方面更容易地识别函数。此外,ES6 正式定义了块级函数的行为,因此在严格模式下它们不再是语法错误。

在 ES6 中,函数的行为被 [[Call]][[Construct]] 方法所定义,前者对应普通的函数执行,后者则对应着使用了 new 的调用。new.target 元属性也能用于判断函数被调用时是否使用了 new 。

ES6 函数的最大变化就是增加了箭头函数。箭头函数被设计用于替代匿名函数表达式,它拥有更简洁的语法、词法级的 this 绑定,并且没有 arguments 对象。此外,箭头函数不能修改它们的 this 绑定,因此不能被用作构造器。

尾调用优化允许某些函数的调用被优化,以保持更小的调用栈、使用更少的内存,并防止堆栈溢出。当能进行安全优化时,它会由引擎自动应用。不过你可以考虑重写递归函数,以便能够利用这种优化。