ES6函式擴充套件

2021-08-09 19:57:28 字數 2778 閱讀 9371

函式引數的預設值:

在es5中,我們想給函式乙個預設值,需要這樣寫:

function

add(x, y)

在es6中 ,可以這樣寫:

function

add (x, y = 'ss')

add('dd')// ddss

add('ss','dd')//ssdd

add('dd','') //dd

我們只需要在引數上直接寫上我們想要的預設值就好了。

當我們給函式乙個變數的時候,就宣告了乙個變數,我們在函式內部就不可以在用let或const進行宣告:

function

add(x, y = 'aa')

add([1, 2]); // 3

在前面的解構賦值中還有一些例子可以參考。

rest引數

es6中增加了rest引數,其形式為:… 變數名

也就是說在我們不知道引數個數的情況下,就可以使用這種方法:

function

add(...values)

return sum;

}add(2,5,3);

需要注意的是,rest引數一定是最後乙個引數:

function

(a ,...value ,b)

擴充套件運算子

使用方法為:…

console.log(...[1, 2, 3, 4]);

// 1, 2, 3, 4

擴充套件運算子可以用來進行陣列的合併:

var arr1 = [1, 2]

var arr2 = [3, 4]

var arr3 = [5, 6]

var arr4 = [...arr1,...arr2,...arr3]

//arr4 = [1, 2, 3, 4, 5, 6]

const [a,...arr] = [1, 2, 3, 4, 5, 6];

//a = 1 arr = [2, 3, 4, 5, 6]

[...

'hello']

//['h','e','l','l','o']

箭頭函式

es6新增了函式的寫法,箭頭函式,下面是箭頭函式的基本寫法:

const a = y => y
等同於:

const a = function

(y)

如果不需要引數,就這樣寫:

cosnt a = () => y;
如果箭頭函式的**塊多與一行,我們就用大括號包起來:

const

a = (a, b) => ;

如想返回乙個物件,需要用圓括號包起來:

箭頭函式的this是固定的,就指向函式定義是的作用域,不會改變。

尾調函式

尾調函式就是某個函式在最後一步呼叫另乙個函式。

function

a()

這就是乙個最簡單的尾調函式。

那麼為什麼要有尾遞迴這個方法出現那,我在網上看了半天,發現到最後總結起來就是一句話:」顯得高階」。

其實解釋就是,因為函式呼叫函式,會生成呼叫幀,這樣就會占用一些記憶體空間,如果我們採用尾呼叫的方法,就可以避免這個問題出現。

尾遞迴

函式在函式內部呼叫自己,叫做遞迴,函式在尾部呼叫自己,就是尾遞迴,由於上面的原因,尾遞迴可以大大的減少對記憶體的占用,是**的執行效率更高。

下面是兩個例子:

function

factorial

(n)

factorial(5) // 120

這個是正常的遞迴呼叫,我們給他改為尾遞迴:

function

factorial

(n, total)

factorial(5, 1) // 120

他們倆個的區別就是,乙個是將自身用於計算;乙個返回了自身,將計算的步驟放在了引數裡。

還有乙個著名的演算法,斐波納西數列:

正常的話是這樣寫:

function

fibonacci

(n) ;

return fibonacci(n - 1) + fibonacci(n - 2);

}

運用尾遞迴就要這樣寫:

function

fibonacci2

(n , ac1 = 1 , ac2 = 1) ;

return fibonacci2 (n - 1, ac2, ac1 + ac2);

}

是不是覺得**難理解了,尾遞迴的優化寫法有好多,但是我發現只有es6的寫法是最簡單易懂的,因為es6提供了預設的引數值:

function

factorial

(n, total = 1)

這個與上面的第乙個例子一樣,計算乙個數的階乘。

ES6 函式擴充套件

函式在js裡是相當重要的一部分了,es6裡也新增了一些函式方法,來看一下 test hello hello world test hello kill hello kill es6增加了函式引數預設值,可以直接在宣告引數的同時賦預設值,但是也可以後面重新賦值 test2 kill 括號內有引數x時,...

ES6函式擴充套件

function fun a,b world fun hello 輸出helloworld let a aa function fun a,b a fun bb function fun arg fun 1,2,3,4,1 語法 param param 對應函式 function 沒有引數 乙個引數...

ES6 函式擴充套件

函式新增特性 test hello hello world test hello kill hello kill 首先我們看上面的 函式預設值就是引數含有預設值的函式,此例子中y是有預設值的,值是world,所以我們在呼叫的時候,如果沒有給定第二個引數,輸出的結果是hello world,如果給了第...