ES6 07箭头扩展和尾调用
要点:1.箭头扩展 2.尾调用
一.箭头扩展
1.箭头也支持一些内置函数的使用,例sort()排序
let arr=[3,1,2].sort((a,b)=>(a-b)); console.log(arr); // 翻译后代码 let arr=[3,1,2].sort(function(a,b){ return a-b; })
2.箭头函数不支持arguments绑定,直接可使用...other模式(rest运算符)
// 下面写法不支持 let fn=(x,y)=>{ return arguments[0] + arguments[1] } // 不确定参数,使用... let fn=(...other)=>{ return other[0] + other[1] } console.log(fn(10,20));
3.箭头函数和普通函数一样,都可以被typeof和instanceof
console.log(typeof fn); console.log(fn instanceof Function);
二.尾调用优化
1.什么是尾调用,一个函数的最后可执行的一步调用了其他函数
function go(x){ return x+20; } let fn=function(x){ return go(x); } console.log(fn(10));
2.那什么是尾调用优化?为何要优化?因为:每次尾调用都会创建栈帧
3.尾调用次数过多,内存中调用的栈越来越大,可能会出现程序问题
4.特别在递归函数问题上,尾调用优化适合在这种场景中使用
5.尾调用优化必须在ES6的严格模式下,'use strict'
6.严格模式,可以设置为全局作用域,也可在函数体内有效
7.严格模式对变量、对象和函数做了一些代码规范等等
8.面对尾调用,必须严格按照三个规则,才能执行严格模式下的优化
①尾调用必须return返回 go(x)错误
②尾调用return返回的不是函数,而是函数赋值的变量,不在尾部
let result=go(x); return result; 'use strict' //严格模式 function fn(x){ //console.log(x); if(x<=1){ return 1; } return fn(x-1); } fn(10);