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);

 

posted @ 2021-11-24 20:18  翟莹萍  阅读(40)  评论(0编辑  收藏  举报