ES6 07箭頭擴充套件和尾呼叫
阿新 • • 發佈:2021-11-24
// 要點: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);